{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# default_exp data.preparation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Data preparation\n",
    "\n",
    "> Functions required to prepare X (and y) from a pandas dataframe."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# export\n",
    "from tsai.imports import *\n",
    "from tsai.utils import *\n",
    "from tsai.data.validation import *\n",
    "from io import StringIO"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#export\n",
    "def df2Xy(df, sample_col=None, feat_col=None, data_cols=None, target_col=None, steps_in_rows=False, to3d=True, splits=None,\n",
    "          sort_by=None, ascending=True, y_func=None, return_names=False):\n",
    "    r\"\"\"\n",
    "    This function allows you to transform a pandas dataframe into X and y numpy arrays that can be used to craete a TSDataset.\n",
    "    sample_col: column that uniquely identifies each sample.\n",
    "    feat_col: used for multivariate datasets. It indicates which is the column that indicates the feature by row.\n",
    "    data_col: indicates ths column/s where the data is located. If None, it means all columns (except the sample_col, feat_col, and target_col)\n",
    "    target_col: indicates the column/s where the target is.\n",
    "    steps_in_rows: flag to indicate if each step is in a different row or in a different column (default).\n",
    "    to3d: turns X to 3d (including univariate time series)\n",
    "    sort_by: used to indicate how to sort the dataframe.\n",
    "    y_func: function used to calculate y for each sample (and target_col)\n",
    "    return_names: flag to return the names of the columns from where X was generated\n",
    "    \"\"\"\n",
    "    if feat_col is not None:\n",
    "        assert sample_col is not None, 'You must pass a sample_col when you pass a feat_col'\n",
    "\n",
    "    passed_cols = []\n",
    "    sort_cols = []\n",
    "    if sort_by is not None:\n",
    "        if isinstance(sort_by, pd.core.indexes.base.Index): sort_by = sort_by.tolist()\n",
    "        sort_cols += listify(sort_by)\n",
    "    if sample_col is not None:\n",
    "        if isinstance(sample_col, pd.core.indexes.base.Index): sample_col = sample_col.tolist()\n",
    "        sample_col = listify(sample_col)\n",
    "        if sample_col[0] not in sort_cols: sort_cols += listify(sample_col)\n",
    "        passed_cols += sample_col\n",
    "    if feat_col is not None:\n",
    "        if isinstance(feat_col, pd.core.indexes.base.Index): feat_col = feat_col.tolist()\n",
    "        feat_col = listify(feat_col)\n",
    "        if feat_col[0] not in sort_cols: sort_cols += listify(feat_col)\n",
    "        passed_cols += feat_col\n",
    "    if data_cols is not None:\n",
    "        if isinstance(data_cols, pd.core.indexes.base.Index): data_cols = data_cols.tolist()\n",
    "        data_cols = listify(data_cols)\n",
    "    if target_col is not None:\n",
    "        if isinstance(target_col, pd.core.indexes.base.Index): target_col = target_col.tolist()\n",
    "        target_col = listify(target_col)\n",
    "        passed_cols += target_col\n",
    "    if data_cols is None:\n",
    "        data_cols = [col for col in df.columns if col not in passed_cols]\n",
    "    if target_col is not None: \n",
    "        if any([t for t in target_col if t in data_cols]): print(f\"Are you sure you want to include {target_col} in X?\")\n",
    "    if sort_by and sort_cols:\n",
    "        df.sort_values(sort_cols, ascending=ascending, inplace=True)\n",
    "\n",
    "    # X\n",
    "    X = df.loc[:, data_cols].values\n",
    "    if X.dtype == 'O':\n",
    "        X = X.astype(np.float32)\n",
    "    if sample_col is not None:\n",
    "        unique_ids = df[sample_col[0]].unique().tolist()\n",
    "        n_samples = len(unique_ids)\n",
    "    else:\n",
    "        unique_ids = np.arange(len(df)).tolist()\n",
    "        n_samples = len(df)\n",
    "    if to3d:\n",
    "        if feat_col is not None:\n",
    "            n_feats = df[feat_col[0]].nunique()\n",
    "            X = X.reshape(n_samples, n_feats, -1)\n",
    "        elif steps_in_rows:\n",
    "            X = X.reshape(n_samples, -1, len(data_cols)).swapaxes(1,2)\n",
    "        else:\n",
    "            X = X.reshape(n_samples, 1, -1)\n",
    "\n",
    "    # y\n",
    "    if target_col is not None:\n",
    "        if sample_col is not None:\n",
    "            y = []\n",
    "            for tc in target_col:\n",
    "                _y = np.concatenate(df.groupby(sample_col)[tc].apply(np.array).reset_index()[tc]).reshape(n_samples, -1)\n",
    "                if y_func is not None: _y = y_func(_y)\n",
    "                y.append(_y)\n",
    "            y = np.concatenate(y, -1)\n",
    "        else:\n",
    "            y = df[target_col].values\n",
    "        y = np.squeeze(y)\n",
    "    else:\n",
    "        y = None\n",
    "\n",
    "    # Output\n",
    "    if splits is None: \n",
    "        if return_names: return X, y, data_cols\n",
    "        else: return X, y\n",
    "    else: \n",
    "        if return_names: return split_xy(X, y, splits), data_cols\n",
    "        return split_xy(X, y, splits)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#export  \n",
    "def split_Xy(X, y=None, splits=None):\n",
    "    if splits is None: \n",
    "        if y is not None: return X, y\n",
    "        else: return X\n",
    "    if not is_listy(splits[0]): splits = [splits]\n",
    "    else: assert not is_listy(splits[0][0]), 'You must pass a single set of splits.'\n",
    "    _X = []\n",
    "    _y = []\n",
    "    for split in splits:\n",
    "        _X.append(X[split])\n",
    "        if y is not None: _y.append(y[split])\n",
    "    if len(splits) == 1: return _X[0], _y[0]\n",
    "    elif len(splits) == 2: return _X[0], _y[0], _X[1], _y[1]\n",
    "    elif len(splits) == 3: return _X[0], _y[0], _X[1], _y[1], _X[2], _y[2]\n",
    "    \n",
    "df2xy = df2Xy\n",
    "split_xy = split_Xy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sample_id</th>\n",
       "      <th>var1</th>\n",
       "      <th>var2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>10</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>11</td>\n",
       "      <td>101</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>12</td>\n",
       "      <td>102</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2</td>\n",
       "      <td>23</td>\n",
       "      <td>203</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2</td>\n",
       "      <td>24</td>\n",
       "      <td>204</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2</td>\n",
       "      <td>25</td>\n",
       "      <td>205</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>3</td>\n",
       "      <td>36</td>\n",
       "      <td>306</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>3</td>\n",
       "      <td>37</td>\n",
       "      <td>307</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>3</td>\n",
       "      <td>38</td>\n",
       "      <td>308</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   sample_id  var1  var2\n",
       "0          1    10   100\n",
       "1          1    11   101\n",
       "2          1    12   102\n",
       "3          2    23   203\n",
       "4          2    24   204\n",
       "5          2    25   205\n",
       "6          3    36   306\n",
       "7          3    37   307\n",
       "8          3    38   308"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame()\n",
    "df['sample_id'] = np.array([1,1,1,2,2,2,3,3,3])\n",
    "df['var1'] = df['sample_id'] * 10 + df.index.values\n",
    "df['var2'] = df['sample_id'] * 100 + df.index.values\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_df, y_df = df2Xy(df, sample_col='sample_id', steps_in_rows=True)\n",
    "test_eq(X_df[0], np.array([[10, 11, 12], [100, 101, 102]]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sample_id</th>\n",
       "      <th>feat_id</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>target</th>\n",
       "      <th>target2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>846</td>\n",
       "      <td>8</td>\n",
       "      <td>-0.925849</td>\n",
       "      <td>0.674087</td>\n",
       "      <td>0.379934</td>\n",
       "      <td>0.518507</td>\n",
       "      <td>0.097288</td>\n",
       "      <td>0.771532</td>\n",
       "      <td>a</td>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>58</td>\n",
       "      <td>1</td>\n",
       "      <td>0.839221</td>\n",
       "      <td>0.389044</td>\n",
       "      <td>-0.608590</td>\n",
       "      <td>-0.246981</td>\n",
       "      <td>-1.615276</td>\n",
       "      <td>0.824759</td>\n",
       "      <td>b</td>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>934</td>\n",
       "      <td>3</td>\n",
       "      <td>-0.947548</td>\n",
       "      <td>-0.906396</td>\n",
       "      <td>-2.291011</td>\n",
       "      <td>-0.742853</td>\n",
       "      <td>1.807500</td>\n",
       "      <td>0.203940</td>\n",
       "      <td>a</td>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>920</td>\n",
       "      <td>8</td>\n",
       "      <td>-0.592634</td>\n",
       "      <td>-0.146599</td>\n",
       "      <td>-0.123489</td>\n",
       "      <td>0.330388</td>\n",
       "      <td>-0.791193</td>\n",
       "      <td>0.062297</td>\n",
       "      <td>c</td>\n",
       "      <td>c</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>427</td>\n",
       "      <td>1</td>\n",
       "      <td>0.059581</td>\n",
       "      <td>-0.932821</td>\n",
       "      <td>-0.135653</td>\n",
       "      <td>0.341220</td>\n",
       "      <td>1.501105</td>\n",
       "      <td>-0.728656</td>\n",
       "      <td>c</td>\n",
       "      <td>c</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9995</th>\n",
       "      <td>528</td>\n",
       "      <td>2</td>\n",
       "      <td>1.014302</td>\n",
       "      <td>-1.207861</td>\n",
       "      <td>1.655349</td>\n",
       "      <td>0.473558</td>\n",
       "      <td>0.157909</td>\n",
       "      <td>-0.926913</td>\n",
       "      <td>a</td>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9996</th>\n",
       "      <td>74</td>\n",
       "      <td>8</td>\n",
       "      <td>0.764139</td>\n",
       "      <td>-1.152124</td>\n",
       "      <td>1.401205</td>\n",
       "      <td>1.353842</td>\n",
       "      <td>-0.334016</td>\n",
       "      <td>0.604483</td>\n",
       "      <td>c</td>\n",
       "      <td>c</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9997</th>\n",
       "      <td>633</td>\n",
       "      <td>8</td>\n",
       "      <td>0.274706</td>\n",
       "      <td>-1.818892</td>\n",
       "      <td>-0.403739</td>\n",
       "      <td>1.216053</td>\n",
       "      <td>-0.053223</td>\n",
       "      <td>0.523597</td>\n",
       "      <td>c</td>\n",
       "      <td>c</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9998</th>\n",
       "      <td>137</td>\n",
       "      <td>7</td>\n",
       "      <td>0.634010</td>\n",
       "      <td>-0.222664</td>\n",
       "      <td>0.256361</td>\n",
       "      <td>-0.310036</td>\n",
       "      <td>0.039044</td>\n",
       "      <td>-2.166115</td>\n",
       "      <td>b</td>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9999</th>\n",
       "      <td>37</td>\n",
       "      <td>9</td>\n",
       "      <td>-0.100446</td>\n",
       "      <td>-0.458405</td>\n",
       "      <td>-1.289415</td>\n",
       "      <td>0.465968</td>\n",
       "      <td>1.206267</td>\n",
       "      <td>1.447000</td>\n",
       "      <td>a</td>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>10000 rows × 10 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      sample_id  feat_id         1         2         3         4         5  \\\n",
       "0           846        8 -0.925849  0.674087  0.379934  0.518507  0.097288   \n",
       "1            58        1  0.839221  0.389044 -0.608590 -0.246981 -1.615276   \n",
       "2           934        3 -0.947548 -0.906396 -2.291011 -0.742853  1.807500   \n",
       "3           920        8 -0.592634 -0.146599 -0.123489  0.330388 -0.791193   \n",
       "4           427        1  0.059581 -0.932821 -0.135653  0.341220  1.501105   \n",
       "...         ...      ...       ...       ...       ...       ...       ...   \n",
       "9995        528        2  1.014302 -1.207861  1.655349  0.473558  0.157909   \n",
       "9996         74        8  0.764139 -1.152124  1.401205  1.353842 -0.334016   \n",
       "9997        633        8  0.274706 -1.818892 -0.403739  1.216053 -0.053223   \n",
       "9998        137        7  0.634010 -0.222664  0.256361 -0.310036  0.039044   \n",
       "9999         37        9 -0.100446 -0.458405 -1.289415  0.465968  1.206267   \n",
       "\n",
       "             6 target target2  \n",
       "0     0.771532      a       a  \n",
       "1     0.824759      b       b  \n",
       "2     0.203940      a       a  \n",
       "3     0.062297      c       c  \n",
       "4    -0.728656      c       c  \n",
       "...        ...    ...     ...  \n",
       "9995 -0.926913      a       a  \n",
       "9996  0.604483      c       c  \n",
       "9997  0.523597      c       c  \n",
       "9998 -2.166115      b       b  \n",
       "9999  1.447000      a       a  \n",
       "\n",
       "[10000 rows x 10 columns]"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n_samples = 1_000\n",
    "n_rows = 10_000\n",
    "\n",
    "sample_ids = np.arange(n_samples).repeat(n_rows//n_samples).reshape(-1,1)\n",
    "feat_ids = np.tile(np.arange(n_rows // n_samples), n_samples).reshape(-1,1)\n",
    "cont = np.random.randn(n_rows, 6)\n",
    "ind_cat = np.random.randint(0, 3, (n_rows, 1))\n",
    "target = np.array(['a', 'b', 'c'])[ind_cat]\n",
    "ind_cat2 = np.random.randint(0, 3, (n_rows, 1))\n",
    "target2 = np.array(['a', 'b', 'c'])[ind_cat2]\n",
    "data = np.concatenate([sample_ids, feat_ids, cont, target, target], -1)\n",
    "columns = ['sample_id', 'feat_id'] + (np.arange(6) + 1).astype(str).tolist() + ['target'] + ['target2']\n",
    "df = pd.DataFrame(data, columns=columns)\n",
    "idx = np.random.choice(np.arange(len(df)), len(df), False)\n",
    "new_dtypes = {'sample_id':np.int32, 'feat_id':np.int32, '1':np.float32, '2':np.float32, '3':np.float32, '4':np.float32, '5':np.float32, '6':np.float32}\n",
    "df = df.astype(dtype=new_dtypes)\n",
    "df = df.loc[idx].reset_index(drop=True)\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def y_func(o): return scipy.stats.mode(o, axis=1).mode\n",
    "X, y = df2xy(df, sample_col='sample_id', feat_col='feat_id', data_cols=['1', '2', '3', '4', '5', '6'], target_col=['target'], \n",
    "             sort_by=['sample_id', 'feat_id'], y_func=y_func)\n",
    "test_eq(X.shape, (1000, 10, 6))\n",
    "test_eq(y.shape, (1000,))\n",
    "rand_idx = np.random.randint(0, np.max(df.sample_id))\n",
    "sorted_df = df.sort_values(by=['sample_id', 'feat_id']).reset_index(drop=True)\n",
    "test_eq(X[rand_idx], sorted_df[sorted_df.sample_id == rand_idx][['1', '2', '3', '4', '5', '6']].values)\n",
    "test_eq(np.squeeze(scipy.stats.mode(sorted_df[sorted_df.sample_id == rand_idx][['target']].values).mode), y[rand_idx])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def y_func(o): return scipy.stats.mode(o, axis=1).mode\n",
    "X, y = df2xy(df, sample_col='sample_id', feat_col='feat_id', target_col=['target', 'target2'], sort_by=['sample_id', 'feat_id'], y_func=y_func)\n",
    "test_eq(X.shape, (1000, 10, 6))\n",
    "test_eq(y.shape, (1000, 2))\n",
    "rand_idx = np.random.randint(0, np.max(df.sample_id))\n",
    "sorted_df = df.sort_values(by=['sample_id', 'feat_id']).reset_index(drop=True)\n",
    "test_eq(X[rand_idx], sorted_df[sorted_df.sample_id == rand_idx][['1', '2', '3', '4', '5', '6']].values)\n",
    "test_eq(np.squeeze(scipy.stats.mode(sorted_df[sorted_df.sample_id == rand_idx][['target', 'target2']].values).mode), y[rand_idx])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sample_id</th>\n",
       "      <th>value_0</th>\n",
       "      <th>value_1</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>rob</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>hot</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>alice</td>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "      <td>lukewarm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>eve</td>\n",
       "      <td>11</td>\n",
       "      <td>12</td>\n",
       "      <td>cold</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   sample_id  value_0  value_1    target\n",
       "0        rob        2        3       hot\n",
       "1      alice        6        7  lukewarm\n",
       "2        eve       11       12      cold"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "(array([[[ 6,  7]],\n",
       " \n",
       "        [[11, 12]],\n",
       " \n",
       "        [[ 2,  3]]]),\n",
       " array(['lukewarm', 'cold', 'hot'], dtype=object))"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Univariate\n",
    "TESTDATA = StringIO(\"\"\"sample_id;value_0;value_1;target\n",
    "    rob;2;3;hot\n",
    "    alice;6;7;lukewarm\n",
    "    eve;11;12;cold\n",
    "    \"\"\")\n",
    "\n",
    "df = pd.read_csv(TESTDATA, sep=\";\")\n",
    "display(df)\n",
    "X, y = df2Xy(df, sample_col='sample_id', target_col='target', data_cols=['value_0', 'value_1'], sort_by='sample_id')\n",
    "test_eq(X.shape, (3, 1, 2))\n",
    "test_eq(y.shape, (3,))\n",
    "X, y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sample_id</th>\n",
       "      <th>timestep</th>\n",
       "      <th>values</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>rob</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>hot</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>alice</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>lukewarm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>eve</td>\n",
       "      <td>1</td>\n",
       "      <td>11</td>\n",
       "      <td>cold</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>rob</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>hot</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>alice</td>\n",
       "      <td>2</td>\n",
       "      <td>7</td>\n",
       "      <td>lukewarm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>eve</td>\n",
       "      <td>2</td>\n",
       "      <td>12</td>\n",
       "      <td>cold</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   sample_id  timestep  values    target\n",
       "0        rob         1       2       hot\n",
       "1      alice         1       6  lukewarm\n",
       "2        eve         1      11      cold\n",
       "3        rob         2       3       hot\n",
       "4      alice         2       7  lukewarm\n",
       "5        eve         2      12      cold"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[[ 6 11]]\n",
      "\n",
      " [[ 2  7]]\n",
      "\n",
      " [[12  3]]] ['lukewarm' 'cold' 'hot']\n"
     ]
    }
   ],
   "source": [
    "# Univariate\n",
    "TESTDATA = StringIO(\"\"\"sample_id;timestep;values;target\n",
    "    rob;1;2;hot\n",
    "    alice;1;6;lukewarm\n",
    "    eve;1;11;cold\n",
    "    \n",
    "    rob;2;3;hot\n",
    "    alice;2;7;lukewarm\n",
    "    eve;2;12;cold\n",
    "    \"\"\")\n",
    "\n",
    "df = pd.read_csv(TESTDATA, sep=\";\")\n",
    "display(df)\n",
    "def y_func(o): return scipy.stats.mode(o, axis=1).mode\n",
    "X, y = df2xy(df, sample_col='sample_id', target_col='target', data_cols=['values'], sort_by='timestep', to3d=True, y_func=y_func)\n",
    "test_eq(X.shape, (3, 1, 2))\n",
    "test_eq(y.shape, (3, ))\n",
    "print(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sample_id</th>\n",
       "      <th>trait</th>\n",
       "      <th>value_0</th>\n",
       "      <th>value_1</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>eve</td>\n",
       "      <td>blue</td>\n",
       "      <td>12</td>\n",
       "      <td>12</td>\n",
       "      <td>cold</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>rob</td>\n",
       "      <td>yellow</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>hot</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>rob</td>\n",
       "      <td>green</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>hot</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>alice</td>\n",
       "      <td>blue</td>\n",
       "      <td>8</td>\n",
       "      <td>9</td>\n",
       "      <td>lukewarm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>alice</td>\n",
       "      <td>red</td>\n",
       "      <td>9</td>\n",
       "      <td>10</td>\n",
       "      <td>lukewarm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>rob</td>\n",
       "      <td>blue</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>hot</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>eve</td>\n",
       "      <td>red</td>\n",
       "      <td>13</td>\n",
       "      <td>14</td>\n",
       "      <td>cold</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>eve</td>\n",
       "      <td>green</td>\n",
       "      <td>10</td>\n",
       "      <td>11</td>\n",
       "      <td>cold</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>rob</td>\n",
       "      <td>red</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>hot</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>eve</td>\n",
       "      <td>yellow</td>\n",
       "      <td>11</td>\n",
       "      <td>12</td>\n",
       "      <td>cold</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>alice</td>\n",
       "      <td>green</td>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "      <td>lukewarm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>alice</td>\n",
       "      <td>yellow</td>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>lukewarm</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    sample_id   trait  value_0  value_1    target\n",
       "10        eve    blue       12       12      cold\n",
       "1         rob  yellow        3        4       hot\n",
       "0         rob   green        2        3       hot\n",
       "6       alice    blue        8        9  lukewarm\n",
       "7       alice     red        9       10  lukewarm\n",
       "2         rob    blue        4        5       hot\n",
       "11        eve     red       13       14      cold\n",
       "9         eve   green       10       11      cold\n",
       "3         rob     red        5        6       hot\n",
       "8         eve  yellow       11       12      cold\n",
       "4       alice   green        6        7  lukewarm\n",
       "5       alice  yellow        7        8  lukewarm"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[[12 12]\n",
      "  [ 3  4]\n",
      "  [ 2  3]\n",
      "  [ 8  9]]\n",
      "\n",
      " [[ 9 10]\n",
      "  [ 4  5]\n",
      "  [13 14]\n",
      "  [10 11]]\n",
      "\n",
      " [[ 5  6]\n",
      "  [11 12]\n",
      "  [ 6  7]\n",
      "  [ 7  8]]] ['lukewarm' 'cold' 'hot']\n"
     ]
    }
   ],
   "source": [
    "# Multivariate\n",
    "TESTDATA = StringIO(\"\"\"sample_id;trait;value_0;value_1;target\n",
    "    rob;green;2;3;hot\n",
    "    rob;yellow;3;4;hot\n",
    "    rob;blue;4;5;hot\n",
    "    rob;red;5;6;hot\n",
    "    alice;green;6;7;lukewarm\n",
    "    alice;yellow;7;8;lukewarm\n",
    "    alice;blue;8;9;lukewarm\n",
    "    alice;red;9;10;lukewarm\n",
    "    eve;yellow;11;12;cold\n",
    "    eve;green;10;11;cold\n",
    "    eve;blue;12;12;cold\n",
    "    eve;red;13;14;cold\n",
    "    \"\"\")\n",
    "\n",
    "df = pd.read_csv(TESTDATA, sep=\";\")\n",
    "idx = np.random.choice(len(df), len(df), False)\n",
    "df = df.iloc[idx]\n",
    "display(df)\n",
    "def y_func(o): return scipy.stats.mode(o, axis=1).mode\n",
    "X, y = df2xy(df, sample_col='sample_id', feat_col='trait', target_col='target', data_cols=['value_0', 'value_1'], y_func=y_func)\n",
    "print(X, y)\n",
    "test_eq(X.shape, (3, 4, 2))\n",
    "test_eq(y.shape, (3,))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sample_id</th>\n",
       "      <th>trait</th>\n",
       "      <th>value_0</th>\n",
       "      <th>value_1</th>\n",
       "      <th>target1</th>\n",
       "      <th>target2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>rob</td>\n",
       "      <td>green</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>hot</td>\n",
       "      <td>good</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>rob</td>\n",
       "      <td>yellow</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>hot</td>\n",
       "      <td>good</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>rob</td>\n",
       "      <td>blue</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>hot</td>\n",
       "      <td>good</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>rob</td>\n",
       "      <td>red</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>hot</td>\n",
       "      <td>good</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>alice</td>\n",
       "      <td>green</td>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "      <td>lukewarm</td>\n",
       "      <td>good</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>alice</td>\n",
       "      <td>yellow</td>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>lukewarm</td>\n",
       "      <td>good</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>alice</td>\n",
       "      <td>blue</td>\n",
       "      <td>8</td>\n",
       "      <td>9</td>\n",
       "      <td>lukewarm</td>\n",
       "      <td>good</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>alice</td>\n",
       "      <td>red</td>\n",
       "      <td>9</td>\n",
       "      <td>10</td>\n",
       "      <td>lukewarm</td>\n",
       "      <td>good</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>eve</td>\n",
       "      <td>yellow</td>\n",
       "      <td>11</td>\n",
       "      <td>12</td>\n",
       "      <td>cold</td>\n",
       "      <td>bad</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>eve</td>\n",
       "      <td>green</td>\n",
       "      <td>10</td>\n",
       "      <td>11</td>\n",
       "      <td>cold</td>\n",
       "      <td>bad</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>eve</td>\n",
       "      <td>blue</td>\n",
       "      <td>12</td>\n",
       "      <td>12</td>\n",
       "      <td>cold</td>\n",
       "      <td>bad</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>eve</td>\n",
       "      <td>red</td>\n",
       "      <td>13</td>\n",
       "      <td>14</td>\n",
       "      <td>cold</td>\n",
       "      <td>bad</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    sample_id   trait  value_0  value_1   target1 target2\n",
       "0         rob   green        2        3       hot    good\n",
       "1         rob  yellow        3        4       hot    good\n",
       "2         rob    blue        4        5       hot    good\n",
       "3         rob     red        5        6       hot    good\n",
       "4       alice   green        6        7  lukewarm    good\n",
       "5       alice  yellow        7        8  lukewarm    good\n",
       "6       alice    blue        8        9  lukewarm    good\n",
       "7       alice     red        9       10  lukewarm    good\n",
       "8         eve  yellow       11       12      cold     bad\n",
       "9         eve   green       10       11      cold     bad\n",
       "10        eve    blue       12       12      cold     bad\n",
       "11        eve     red       13       14      cold     bad"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[[ 2  3]\n",
      "  [ 3  4]\n",
      "  [ 4  5]\n",
      "  [ 5  6]]\n",
      "\n",
      " [[ 6  7]\n",
      "  [ 7  8]\n",
      "  [ 8  9]\n",
      "  [ 9 10]]\n",
      "\n",
      " [[11 12]\n",
      "  [10 11]\n",
      "  [12 12]\n",
      "  [13 14]]] [['lukewarm' 'good']\n",
      " ['cold' 'bad']\n",
      " ['hot' 'good']]\n"
     ]
    }
   ],
   "source": [
    "# Multivariate, multi-label\n",
    "TESTDATA = StringIO(\"\"\"sample_id;trait;value_0;value_1;target1;target2\n",
    "    rob;green;2;3;hot;good\n",
    "    rob;yellow;3;4;hot;good\n",
    "    rob;blue;4;5;hot;good\n",
    "    rob;red;5;6;hot;good\n",
    "    alice;green;6;7;lukewarm;good\n",
    "    alice;yellow;7;8;lukewarm;good\n",
    "    alice;blue;8;9;lukewarm;good\n",
    "    alice;red;9;10;lukewarm;good\n",
    "    eve;yellow;11;12;cold;bad\n",
    "    eve;green;10;11;cold;bad\n",
    "    eve;blue;12;12;cold;bad\n",
    "    eve;red;13;14;cold;bad\n",
    "    \"\"\")\n",
    "\n",
    "df = pd.read_csv(TESTDATA, sep=\";\")\n",
    "display(df)\n",
    "def y_func(o): return scipy.stats.mode(o, axis=1).mode\n",
    "X, y = df2xy(df, sample_col='sample_id', feat_col='trait', target_col=['target1', 'target2'], data_cols=['value_0', 'value_1'], y_func=y_func)\n",
    "test_eq(X.shape, (3, 4, 2))\n",
    "test_eq(y.shape, (3, 2))\n",
    "print(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sample_id</th>\n",
       "      <th>trait</th>\n",
       "      <th>value_0</th>\n",
       "      <th>value_1</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>alice</td>\n",
       "      <td>red</td>\n",
       "      <td>9</td>\n",
       "      <td>10</td>\n",
       "      <td>lukewarm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>alice</td>\n",
       "      <td>blue</td>\n",
       "      <td>8</td>\n",
       "      <td>9</td>\n",
       "      <td>lukewarm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>rob</td>\n",
       "      <td>red</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>hot</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>eve</td>\n",
       "      <td>blue</td>\n",
       "      <td>12</td>\n",
       "      <td>12</td>\n",
       "      <td>cold</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>eve</td>\n",
       "      <td>green</td>\n",
       "      <td>10</td>\n",
       "      <td>11</td>\n",
       "      <td>cold</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>alice</td>\n",
       "      <td>yellow</td>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>lukewarm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>alice</td>\n",
       "      <td>green</td>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "      <td>lukewarm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>eve</td>\n",
       "      <td>red</td>\n",
       "      <td>13</td>\n",
       "      <td>14</td>\n",
       "      <td>cold</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>rob</td>\n",
       "      <td>yellow</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>hot</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>rob</td>\n",
       "      <td>green</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>hot</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>eve</td>\n",
       "      <td>yellow</td>\n",
       "      <td>11</td>\n",
       "      <td>12</td>\n",
       "      <td>cold</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>rob</td>\n",
       "      <td>blue</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>hot</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    sample_id   trait  value_0  value_1    target\n",
       "7       alice     red        9       10  lukewarm\n",
       "6       alice    blue        8        9  lukewarm\n",
       "3         rob     red        5        6       hot\n",
       "10        eve    blue       12       12      cold\n",
       "9         eve   green       10       11      cold\n",
       "5       alice  yellow        7        8  lukewarm\n",
       "4       alice   green        6        7  lukewarm\n",
       "11        eve     red       13       14      cold\n",
       "1         rob  yellow        3        4       hot\n",
       "0         rob   green        2        3       hot\n",
       "8         eve  yellow       11       12      cold\n",
       "2         rob    blue        4        5       hot"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[[ 9 10]\n",
      "  [ 8  9]\n",
      "  [ 5  6]\n",
      "  [12 12]]\n",
      "\n",
      " [[10 11]\n",
      "  [ 7  8]\n",
      "  [ 6  7]\n",
      "  [13 14]]\n",
      "\n",
      " [[ 3  4]\n",
      "  [ 2  3]\n",
      "  [11 12]\n",
      "  [ 4  5]]] None\n"
     ]
    }
   ],
   "source": [
    "# Multivariate, unlabeled\n",
    "TESTDATA = StringIO(\"\"\"sample_id;trait;value_0;value_1;target\n",
    "    rob;green;2;3;hot\n",
    "    rob;yellow;3;4;hot\n",
    "    rob;blue;4;5;hot\n",
    "    rob;red;5;6;hot\n",
    "    alice;green;6;7;lukewarm\n",
    "    alice;yellow;7;8;lukewarm\n",
    "    alice;blue;8;9;lukewarm\n",
    "    alice;red;9;10;lukewarm\n",
    "    eve;yellow;11;12;cold\n",
    "    eve;green;10;11;cold\n",
    "    eve;blue;12;12;cold\n",
    "    eve;red;13;14;cold\n",
    "    \"\"\")\n",
    "\n",
    "df = pd.read_csv(TESTDATA, sep=\";\")\n",
    "idx = np.random.choice(len(df), len(df), False)\n",
    "df = df.iloc[idx]\n",
    "display(df)\n",
    "def y_func(o): return scipy.stats.mode(o, axis=1).mode\n",
    "X, y = df2xy(df, sample_col='sample_id', feat_col='trait', data_cols=['value_0', 'value_1'], y_func=y_func)\n",
    "print(X, y)\n",
    "test_eq(X.shape, (3, 4, 2))\n",
    "test_eq(y, None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sample_id</th>\n",
       "      <th>trait</th>\n",
       "      <th>timestep</th>\n",
       "      <th>values</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>rob</td>\n",
       "      <td>green</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>hot</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>rob</td>\n",
       "      <td>yellow</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>hot</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>rob</td>\n",
       "      <td>blue</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>hot</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>rob</td>\n",
       "      <td>red</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>hot</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>alice</td>\n",
       "      <td>green</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>lukewarm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>alice</td>\n",
       "      <td>yellow</td>\n",
       "      <td>1</td>\n",
       "      <td>7</td>\n",
       "      <td>lukewarm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>alice</td>\n",
       "      <td>blue</td>\n",
       "      <td>1</td>\n",
       "      <td>8</td>\n",
       "      <td>lukewarm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>alice</td>\n",
       "      <td>red</td>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>lukewarm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>eve</td>\n",
       "      <td>yellow</td>\n",
       "      <td>1</td>\n",
       "      <td>11</td>\n",
       "      <td>cold</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>eve</td>\n",
       "      <td>green</td>\n",
       "      <td>1</td>\n",
       "      <td>10</td>\n",
       "      <td>cold</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>eve</td>\n",
       "      <td>blue</td>\n",
       "      <td>1</td>\n",
       "      <td>12</td>\n",
       "      <td>cold</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>eve</td>\n",
       "      <td>red</td>\n",
       "      <td>1</td>\n",
       "      <td>13</td>\n",
       "      <td>cold</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>rob</td>\n",
       "      <td>green</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>hot</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>rob</td>\n",
       "      <td>yellow</td>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>hot</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>rob</td>\n",
       "      <td>blue</td>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "      <td>hot</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>rob</td>\n",
       "      <td>red</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>hot</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>alice</td>\n",
       "      <td>green</td>\n",
       "      <td>2</td>\n",
       "      <td>7</td>\n",
       "      <td>lukewarm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>alice</td>\n",
       "      <td>yellow</td>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "      <td>lukewarm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>alice</td>\n",
       "      <td>blue</td>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "      <td>lukewarm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>alice</td>\n",
       "      <td>red</td>\n",
       "      <td>2</td>\n",
       "      <td>10</td>\n",
       "      <td>lukewarm</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>eve</td>\n",
       "      <td>yellow</td>\n",
       "      <td>2</td>\n",
       "      <td>12</td>\n",
       "      <td>cold</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>eve</td>\n",
       "      <td>green</td>\n",
       "      <td>2</td>\n",
       "      <td>11</td>\n",
       "      <td>cold</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>eve</td>\n",
       "      <td>blue</td>\n",
       "      <td>2</td>\n",
       "      <td>13</td>\n",
       "      <td>cold</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>eve</td>\n",
       "      <td>red</td>\n",
       "      <td>2</td>\n",
       "      <td>14</td>\n",
       "      <td>cold</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    sample_id   trait  timestep  values    target\n",
       "0         rob   green         1       2       hot\n",
       "1         rob  yellow         1       3       hot\n",
       "2         rob    blue         1       4       hot\n",
       "3         rob     red         1       5       hot\n",
       "4       alice   green         1       6  lukewarm\n",
       "5       alice  yellow         1       7  lukewarm\n",
       "6       alice    blue         1       8  lukewarm\n",
       "7       alice     red         1       9  lukewarm\n",
       "8         eve  yellow         1      11      cold\n",
       "9         eve   green         1      10      cold\n",
       "10        eve    blue         1      12      cold\n",
       "11        eve     red         1      13      cold\n",
       "12        rob   green         2       3       hot\n",
       "13        rob  yellow         2       4       hot\n",
       "14        rob    blue         2       5       hot\n",
       "15        rob     red         2       6       hot\n",
       "16      alice   green         2       7  lukewarm\n",
       "17      alice  yellow         2       8  lukewarm\n",
       "18      alice    blue         2       9  lukewarm\n",
       "19      alice     red         2      10  lukewarm\n",
       "20        eve  yellow         2      12      cold\n",
       "21        eve   green         2      11      cold\n",
       "22        eve    blue         2      13      cold\n",
       "23        eve     red         2      14      cold"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[[ 8  6]\n",
      "  [ 9  7]\n",
      "  [12 10]\n",
      "  [13 11]]\n",
      "\n",
      " [[ 4  2]\n",
      "  [ 5  3]\n",
      "  [ 9  7]\n",
      "  [10  8]]\n",
      "\n",
      " [[13 11]\n",
      "  [14 12]\n",
      "  [ 5  3]\n",
      "  [ 6  4]]] ['lukewarm' 'cold' 'hot']\n"
     ]
    }
   ],
   "source": [
    "TESTDATA = StringIO(\"\"\"sample_id;trait;timestep;values;target\n",
    "    rob;green;1;2;hot\n",
    "    rob;yellow;1;3;hot\n",
    "    rob;blue;1;4;hot\n",
    "    rob;red;1;5;hot\n",
    "    alice;green;1;6;lukewarm\n",
    "    alice;yellow;1;7;lukewarm\n",
    "    alice;blue;1;8;lukewarm\n",
    "    alice;red;1;9;lukewarm\n",
    "    eve;yellow;1;11;cold\n",
    "    eve;green;1;10;cold\n",
    "    eve;blue;1;12;cold\n",
    "    eve;red;1;13;cold\n",
    "    \n",
    "    rob;green;2;3;hot\n",
    "    rob;yellow;2;4;hot\n",
    "    rob;blue;2;5;hot\n",
    "    rob;red;2;6;hot\n",
    "    alice;green;2;7;lukewarm\n",
    "    alice;yellow;2;8;lukewarm\n",
    "    alice;blue;2;9;lukewarm\n",
    "    alice;red;2;10;lukewarm\n",
    "    eve;yellow;2;12;cold\n",
    "    eve;green;2;11;cold\n",
    "    eve;blue;2;13;cold\n",
    "    eve;red;2;14;cold\n",
    "    \"\"\")\n",
    "\n",
    "df = pd.read_csv(TESTDATA, sep=\";\")\n",
    "display(df)\n",
    "def y_func(o): return scipy.stats.mode(o, axis=1).mode\n",
    "X, y = df2xy(df, sample_col='sample_id', feat_col='trait', sort_by='timestep', target_col='target', data_cols=['values'], y_func=y_func)\n",
    "print(X, y)\n",
    "test_eq(X.shape, (3, 4, 2))\n",
    "test_eq(y.shape, (3, ))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# export\n",
    "def df2np3d(df, groupby, data_cols=None):\n",
    "    \"\"\"Transforms a df (with the same number of rows per group in groupby) to a 3d ndarray\"\"\"\n",
    "    if data_cols is None: data_cols = df.columns\n",
    "    return np.stack([x[data_cols].values for _, x in df.groupby(groupby)]).transpose(0, 2, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "user = np.array([1,2]).repeat(4).reshape(-1,1)\n",
    "val = np.random.rand(8, 3)\n",
    "data = np.concatenate([user, val], axis=-1)\n",
    "df = pd.DataFrame(data, columns=['user', 'x1', 'x2', 'x3'])\n",
    "test_eq(df2np3d(df, ['user'], ['x1', 'x2', 'x3']).shape, (2, 3, 4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# export\n",
    "def add_missing_value_cols(df, cols=None, dtype=float):\n",
    "    if cols is None: cols = df.columns\n",
    "    elif not is_listy(cols): cols = [cols]\n",
    "    for col in cols:\n",
    "        df[f'missing_{col}'] = df[col].isnull().astype(dtype)\n",
    "    return df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>missing_A</th>\n",
       "      <th>missing_B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.468662</td>\n",
       "      <td>-0.022762</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.792910</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.458363</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.743246</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-1.198832</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>-0.892410</td>\n",
       "      <td>-0.919750</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>-0.355290</td>\n",
       "      <td>-0.139825</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>-0.329055</td>\n",
       "      <td>-0.565804</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.374796</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.483930</td>\n",
       "      <td>0.515686</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          A         B  missing_A  missing_B\n",
       "0 -0.468662 -0.022762        0.0        0.0\n",
       "1 -0.792910       NaN        0.0        1.0\n",
       "2  0.458363       NaN        0.0        1.0\n",
       "3 -0.743246       NaN        0.0        1.0\n",
       "4 -1.198832       NaN        0.0        1.0\n",
       "5 -0.892410 -0.919750        0.0        0.0\n",
       "6 -0.355290 -0.139825        0.0        0.0\n",
       "7 -0.329055 -0.565804        0.0        0.0\n",
       "8       NaN  0.374796        1.0        0.0\n",
       "9  0.483930  0.515686        0.0        0.0"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = np.random.randn(10, 2)\n",
    "mask = data > .8\n",
    "data[mask] = np.nan\n",
    "df = pd.DataFrame(data, columns=['A', 'B'])\n",
    "df = add_missing_value_cols(df, cols=None, dtype=float)\n",
    "test_eq(df['A'].isnull().sum(), df['missing_A'].sum())\n",
    "test_eq(df['B'].isnull().sum(), df['missing_B'].sum())\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# export\n",
    "\n",
    "def add_missing_timestamps(df, datetime_col, groupby=None, fill_value=np.nan, range_by_group=True, freq=None):\n",
    "    \"\"\"Fills missing timestamps in a dataframe to a desired frequency\n",
    "    Args:\n",
    "        df:                      pandas DataFrame\n",
    "        datetime_col:            column that contains the datetime data (without duplicates within groups)\n",
    "        groupby:                 column used to identify unique_ids\n",
    "        fill_value:              values that will be insert where missing dates exist. Default:np.nan\n",
    "        range_by_group:          if True, dates will be filled between min and max dates for each group. Otherwise, between the min and max dates in the df.\n",
    "        freq:                    frequence used to fillin the missing datetime\n",
    "    \"\"\"\n",
    "    if is_listy(datetime_col): \n",
    "        assert len(datetime_col) == 1, 'you can only pass a single datetime_col'\n",
    "        datetime_col = datetime_col[0]\n",
    "    dates = pd.date_range(df[datetime_col].min(), df[datetime_col].max(), freq=freq)\n",
    "    if groupby is not None:\n",
    "        if is_listy(groupby): \n",
    "            assert len(groupby) == 1, 'you can only pass a single groupby'\n",
    "            groupby = groupby[0]\n",
    "        keys = df[groupby].unique()\n",
    "        if range_by_group:\n",
    "            # Fills missing dates between min and max for each unique id\n",
    "            min_dates = df.groupby(groupby)[datetime_col].min()\n",
    "            max_dates = df.groupby(groupby)[datetime_col].max()\n",
    "            idx_tuples = flatten_list([[(d, key) for d in pd.date_range(min_date, max_date, freq=freq)] for min_date, max_date, key in \\\n",
    "                                       zip(min_dates, max_dates, keys)])\n",
    "            multi_idx = pd.MultiIndex.from_tuples(idx_tuples, names=[datetime_col, groupby])\n",
    "            df = df.set_index([datetime_col, groupby]).reindex(multi_idx, fill_value=np.nan).reset_index()\n",
    "        else:\n",
    "            # Fills missing dates between min and max - same for all unique ids\n",
    "            multi_idx = pd.MultiIndex.from_product((dates, keys), names=[datetime_col, groupby])\n",
    "            df = df.set_index([datetime_col, groupby]).reindex(multi_idx, fill_value=np.nan)\n",
    "            df = df.reset_index().sort_values(by=[groupby, datetime_col]).reset_index(drop=True)\n",
    "    else: \n",
    "        index = pd.Index(dates, name=datetime_col)\n",
    "        df = df.set_index([datetime_col]).reindex(index, fill_value=fill_value)\n",
    "        df = df.reset_index().reset_index(drop=True)\n",
    "    return df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>feature1</th>\n",
       "      <th>feature2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-05-01</td>\n",
       "      <td>0.184415</td>\n",
       "      <td>0.149166</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-05-03</td>\n",
       "      <td>0.792900</td>\n",
       "      <td>0.068131</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-05-05</td>\n",
       "      <td>0.211425</td>\n",
       "      <td>0.085824</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-05-06</td>\n",
       "      <td>0.953127</td>\n",
       "      <td>0.682888</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2021-05-07</td>\n",
       "      <td>0.012330</td>\n",
       "      <td>0.982041</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        date  feature1  feature2\n",
       "0 2021-05-01  0.184415  0.149166\n",
       "1 2021-05-03  0.792900  0.068131\n",
       "2 2021-05-05  0.211425  0.085824\n",
       "3 2021-05-06  0.953127  0.682888\n",
       "4 2021-05-07  0.012330  0.982041"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Filling dates between min and max dates\n",
    "dates = pd.date_range('2021-05-01', '2021-05-07').values\n",
    "data = np.zeros((len(dates), 3))\n",
    "data[:, 0] = dates\n",
    "data[:, 1] = np.random.rand(len(dates))\n",
    "data[:, 2] = np.random.rand(len(dates))\n",
    "cols = ['date', 'feature1', 'feature2']\n",
    "date_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'feature1': float, 'feature2': float})\n",
    "date_df_with_missing_dates = date_df.drop([1,3]).reset_index(drop=True)\n",
    "date_df_with_missing_dates"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>feature1</th>\n",
       "      <th>feature2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-05-01</td>\n",
       "      <td>0.184415</td>\n",
       "      <td>0.149166</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-05-02</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-05-03</td>\n",
       "      <td>0.792900</td>\n",
       "      <td>0.068131</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-05-04</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2021-05-05</td>\n",
       "      <td>0.211425</td>\n",
       "      <td>0.085824</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2021-05-06</td>\n",
       "      <td>0.953127</td>\n",
       "      <td>0.682888</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2021-05-07</td>\n",
       "      <td>0.012330</td>\n",
       "      <td>0.982041</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        date  feature1  feature2\n",
       "0 2021-05-01  0.184415  0.149166\n",
       "1 2021-05-02       NaN       NaN\n",
       "2 2021-05-03  0.792900  0.068131\n",
       "3 2021-05-04       NaN       NaN\n",
       "4 2021-05-05  0.211425  0.085824\n",
       "5 2021-05-06  0.953127  0.682888\n",
       "6 2021-05-07  0.012330  0.982041"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# No groups\n",
    "expected_output_df = date_df.copy()\n",
    "expected_output_df.loc[[1,3], ['feature1', 'feature2']] = np.nan\n",
    "display(expected_output_df)\n",
    "output_df = add_missing_timestamps(date_df_with_missing_dates, \n",
    "                                   'date', \n",
    "                                   groupby=None, \n",
    "                                   fill_value=np.nan, \n",
    "                                   range_by_group=False)\n",
    "test_eq(output_df, expected_output_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>id</th>\n",
       "      <th>feature1</th>\n",
       "      <th>feature2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-05-03</td>\n",
       "      <td>0</td>\n",
       "      <td>0.118226</td>\n",
       "      <td>0.742834</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-05-05</td>\n",
       "      <td>0</td>\n",
       "      <td>0.115969</td>\n",
       "      <td>0.084061</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-05-06</td>\n",
       "      <td>0</td>\n",
       "      <td>0.125286</td>\n",
       "      <td>0.849047</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-05-07</td>\n",
       "      <td>0</td>\n",
       "      <td>0.929838</td>\n",
       "      <td>0.455664</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2021-05-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0.742209</td>\n",
       "      <td>0.988968</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2021-05-03</td>\n",
       "      <td>1</td>\n",
       "      <td>0.167396</td>\n",
       "      <td>0.907378</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2021-05-04</td>\n",
       "      <td>1</td>\n",
       "      <td>0.971844</td>\n",
       "      <td>0.065978</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2021-05-06</td>\n",
       "      <td>1</td>\n",
       "      <td>0.780535</td>\n",
       "      <td>0.961809</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        date  id  feature1  feature2\n",
       "0 2021-05-03   0  0.118226  0.742834\n",
       "1 2021-05-05   0  0.115969  0.084061\n",
       "2 2021-05-06   0  0.125286  0.849047\n",
       "3 2021-05-07   0  0.929838  0.455664\n",
       "4 2021-05-01   1  0.742209  0.988968\n",
       "5 2021-05-03   1  0.167396  0.907378\n",
       "6 2021-05-04   1  0.971844  0.065978\n",
       "7 2021-05-06   1  0.780535  0.961809"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Filling dates between min and max dates for each value in groupby column\n",
    "dates = pd.date_range('2021-05-01', '2021-05-07').values\n",
    "dates = np.concatenate((dates, dates))\n",
    "data = np.zeros((len(dates), 4))\n",
    "data[:, 0] = dates\n",
    "data[:, 1] = np.array([0]*(len(dates)//2)+[1]*(len(dates)//2))\n",
    "data[:, 2] = np.random.rand(len(dates))\n",
    "data[:, 3] = np.random.rand(len(dates))\n",
    "cols = ['date', 'id', 'feature1', 'feature2']\n",
    "date_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'id': int, 'feature1': float, 'feature2': float})\n",
    "date_df_with_missing_dates = date_df.drop([0,1,3,8,11,13]).reset_index(drop=True)\n",
    "\n",
    "date_df_with_missing_dates"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>id</th>\n",
       "      <th>feature1</th>\n",
       "      <th>feature2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-05-03</td>\n",
       "      <td>0</td>\n",
       "      <td>0.118226</td>\n",
       "      <td>0.742834</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-05-04</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-05-05</td>\n",
       "      <td>0</td>\n",
       "      <td>0.115969</td>\n",
       "      <td>0.084061</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-05-06</td>\n",
       "      <td>0</td>\n",
       "      <td>0.125286</td>\n",
       "      <td>0.849047</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2021-05-07</td>\n",
       "      <td>0</td>\n",
       "      <td>0.929838</td>\n",
       "      <td>0.455664</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2021-05-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0.742209</td>\n",
       "      <td>0.988968</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2021-05-02</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2021-05-03</td>\n",
       "      <td>1</td>\n",
       "      <td>0.167396</td>\n",
       "      <td>0.907378</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2021-05-04</td>\n",
       "      <td>1</td>\n",
       "      <td>0.971844</td>\n",
       "      <td>0.065978</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2021-05-05</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>2021-05-06</td>\n",
       "      <td>1</td>\n",
       "      <td>0.780535</td>\n",
       "      <td>0.961809</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         date  id  feature1  feature2\n",
       "0  2021-05-03   0  0.118226  0.742834\n",
       "1  2021-05-04   0       NaN       NaN\n",
       "2  2021-05-05   0  0.115969  0.084061\n",
       "3  2021-05-06   0  0.125286  0.849047\n",
       "4  2021-05-07   0  0.929838  0.455664\n",
       "5  2021-05-01   1  0.742209  0.988968\n",
       "6  2021-05-02   1       NaN       NaN\n",
       "7  2021-05-03   1  0.167396  0.907378\n",
       "8  2021-05-04   1  0.971844  0.065978\n",
       "9  2021-05-05   1       NaN       NaN\n",
       "10 2021-05-06   1  0.780535  0.961809"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# groupby='id', range_by_group=True\n",
    "expected_output_df = date_df.drop([0,1,13]).reset_index(drop=True)  \n",
    "expected_output_df.loc[[1,6,9], ['feature1', 'feature2']] = np.nan\n",
    "display(expected_output_df)\n",
    "output_df = add_missing_timestamps(date_df_with_missing_dates, \n",
    "                                   'date', \n",
    "                                   groupby='id', \n",
    "                                   fill_value=np.nan, \n",
    "                                   range_by_group=True)\n",
    "test_eq(expected_output_df, output_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>id</th>\n",
       "      <th>feature1</th>\n",
       "      <th>feature2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-05-01</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-05-02</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-05-03</td>\n",
       "      <td>0</td>\n",
       "      <td>0.118226</td>\n",
       "      <td>0.742834</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-05-04</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2021-05-05</td>\n",
       "      <td>0</td>\n",
       "      <td>0.115969</td>\n",
       "      <td>0.084061</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2021-05-06</td>\n",
       "      <td>0</td>\n",
       "      <td>0.125286</td>\n",
       "      <td>0.849047</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2021-05-07</td>\n",
       "      <td>0</td>\n",
       "      <td>0.929838</td>\n",
       "      <td>0.455664</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2021-05-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0.742209</td>\n",
       "      <td>0.988968</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2021-05-02</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2021-05-03</td>\n",
       "      <td>1</td>\n",
       "      <td>0.167396</td>\n",
       "      <td>0.907378</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>2021-05-04</td>\n",
       "      <td>1</td>\n",
       "      <td>0.971844</td>\n",
       "      <td>0.065978</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>2021-05-05</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2021-05-06</td>\n",
       "      <td>1</td>\n",
       "      <td>0.780535</td>\n",
       "      <td>0.961809</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>2021-05-07</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         date  id  feature1  feature2\n",
       "0  2021-05-01   0       NaN       NaN\n",
       "1  2021-05-02   0       NaN       NaN\n",
       "2  2021-05-03   0  0.118226  0.742834\n",
       "3  2021-05-04   0       NaN       NaN\n",
       "4  2021-05-05   0  0.115969  0.084061\n",
       "5  2021-05-06   0  0.125286  0.849047\n",
       "6  2021-05-07   0  0.929838  0.455664\n",
       "7  2021-05-01   1  0.742209  0.988968\n",
       "8  2021-05-02   1       NaN       NaN\n",
       "9  2021-05-03   1  0.167396  0.907378\n",
       "10 2021-05-04   1  0.971844  0.065978\n",
       "11 2021-05-05   1       NaN       NaN\n",
       "12 2021-05-06   1  0.780535  0.961809\n",
       "13 2021-05-07   1       NaN       NaN"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# groupby='id', range_by_group=False\n",
    "expected_output_df = date_df.copy() \n",
    "expected_output_df.loc[[0,1,3,8,11,13], ['feature1', 'feature2']] = np.nan\n",
    "display(expected_output_df)\n",
    "output_df = add_missing_timestamps(date_df_with_missing_dates, \n",
    "                                   'date', \n",
    "                                   groupby='id', \n",
    "                                   fill_value=np.nan, \n",
    "                                   range_by_group=False)\n",
    "test_eq(expected_output_df, output_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>feature1</th>\n",
       "      <th>feature2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-05-01 00:00:00</td>\n",
       "      <td>0.967668</td>\n",
       "      <td>0.835644</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-05-01 08:00:00</td>\n",
       "      <td>0.671406</td>\n",
       "      <td>0.875836</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-05-01 16:00:00</td>\n",
       "      <td>0.289419</td>\n",
       "      <td>0.887240</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-05-01 20:00:00</td>\n",
       "      <td>0.539612</td>\n",
       "      <td>0.320326</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 date  feature1  feature2\n",
       "0 2021-05-01 00:00:00  0.967668  0.835644\n",
       "1 2021-05-01 08:00:00  0.671406  0.875836\n",
       "2 2021-05-01 16:00:00  0.289419  0.887240\n",
       "3 2021-05-01 20:00:00  0.539612  0.320326"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Filling dates between min and max timestamps\n",
    "dates = pd.date_range('2021-05-01 000:00', '2021-05-01 20:00', freq='4H').values\n",
    "data = np.zeros((len(dates), 3))\n",
    "data[:, 0] = dates\n",
    "data[:, 1] = np.random.rand(len(dates))\n",
    "data[:, 2] = np.random.rand(len(dates))\n",
    "cols = ['date', 'feature1', 'feature2']\n",
    "date_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'feature1': float, 'feature2': float})\n",
    "date_df_with_missing_dates = date_df.drop([1,3]).reset_index(drop=True)\n",
    "date_df_with_missing_dates"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>feature1</th>\n",
       "      <th>feature2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-05-01 00:00:00</td>\n",
       "      <td>0.967668</td>\n",
       "      <td>0.835644</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-05-01 04:00:00</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-05-01 08:00:00</td>\n",
       "      <td>0.671406</td>\n",
       "      <td>0.875836</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-05-01 12:00:00</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2021-05-01 16:00:00</td>\n",
       "      <td>0.289419</td>\n",
       "      <td>0.887240</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2021-05-01 20:00:00</td>\n",
       "      <td>0.539612</td>\n",
       "      <td>0.320326</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 date  feature1  feature2\n",
       "0 2021-05-01 00:00:00  0.967668  0.835644\n",
       "1 2021-05-01 04:00:00       NaN       NaN\n",
       "2 2021-05-01 08:00:00  0.671406  0.875836\n",
       "3 2021-05-01 12:00:00       NaN       NaN\n",
       "4 2021-05-01 16:00:00  0.289419  0.887240\n",
       "5 2021-05-01 20:00:00  0.539612  0.320326"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# No groups\n",
    "expected_output_df = date_df.copy()\n",
    "expected_output_df.loc[[1,3], ['feature1', 'feature2']] = np.nan\n",
    "display(expected_output_df)\n",
    "output_df = add_missing_timestamps(date_df_with_missing_dates, 'date', groupby=None, fill_value=np.nan, range_by_group=False, freq='4H')\n",
    "test_eq(output_df, expected_output_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>id</th>\n",
       "      <th>feature1</th>\n",
       "      <th>feature2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-05-01 08:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.795633</td>\n",
       "      <td>0.296898</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-05-01 16:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.968405</td>\n",
       "      <td>0.654058</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-05-01 20:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.132000</td>\n",
       "      <td>0.469576</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-05-01 00:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.650885</td>\n",
       "      <td>0.622190</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2021-05-01 04:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.040657</td>\n",
       "      <td>0.237668</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2021-05-01 16:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.055866</td>\n",
       "      <td>0.254711</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 date  id  feature1  feature2\n",
       "0 2021-05-01 08:00:00   0  0.795633  0.296898\n",
       "1 2021-05-01 16:00:00   0  0.968405  0.654058\n",
       "2 2021-05-01 20:00:00   0  0.132000  0.469576\n",
       "3 2021-05-01 00:00:00   1  0.650885  0.622190\n",
       "4 2021-05-01 04:00:00   1  0.040657  0.237668\n",
       "5 2021-05-01 16:00:00   1  0.055866  0.254711"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Filling missing values between min and max timestamps for each value in groupby column\n",
    "\n",
    "dates = pd.date_range('2021-05-01 000:00', '2021-05-01 20:00', freq='4H').values\n",
    "dates = np.concatenate((dates, dates))\n",
    "data = np.zeros((len(dates), 4))\n",
    "data[:, 0] = dates\n",
    "data[:, 1] = np.array([0]*(len(dates)//2)+[1]*(len(dates)//2))\n",
    "data[:, 2] = np.random.rand(len(dates))\n",
    "data[:, 3] = np.random.rand(len(dates))\n",
    "cols = ['date', 'id', 'feature1', 'feature2']\n",
    "date_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'id': int, 'feature1': float, 'feature2': float})\n",
    "date_df_with_missing_dates = date_df.drop([0,1,3,8,9,11]).reset_index(drop=True)\n",
    "date_df_with_missing_dates"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>id</th>\n",
       "      <th>feature1</th>\n",
       "      <th>feature2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-05-01 08:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.795633</td>\n",
       "      <td>0.296898</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-05-01 12:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-05-01 16:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.968405</td>\n",
       "      <td>0.654058</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-05-01 20:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.132000</td>\n",
       "      <td>0.469576</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2021-05-01 00:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.650885</td>\n",
       "      <td>0.622190</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2021-05-01 04:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.040657</td>\n",
       "      <td>0.237668</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2021-05-01 08:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2021-05-01 12:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2021-05-01 16:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.055866</td>\n",
       "      <td>0.254711</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 date  id  feature1  feature2\n",
       "0 2021-05-01 08:00:00   0  0.795633  0.296898\n",
       "1 2021-05-01 12:00:00   0       NaN       NaN\n",
       "2 2021-05-01 16:00:00   0  0.968405  0.654058\n",
       "3 2021-05-01 20:00:00   0  0.132000  0.469576\n",
       "4 2021-05-01 00:00:00   1  0.650885  0.622190\n",
       "5 2021-05-01 04:00:00   1  0.040657  0.237668\n",
       "6 2021-05-01 08:00:00   1       NaN       NaN\n",
       "7 2021-05-01 12:00:00   1       NaN       NaN\n",
       "8 2021-05-01 16:00:00   1  0.055866  0.254711"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# groupby='id', range_by_group=True\n",
    "expected_output_df = date_df.drop([0,1,11]).reset_index(drop=True)  \n",
    "expected_output_df.loc[[1,6,7], ['feature1', 'feature2']] = np.nan\n",
    "display(expected_output_df)\n",
    "output_df = add_missing_timestamps(date_df_with_missing_dates, \n",
    "                                   'date', \n",
    "                                   groupby='id', \n",
    "                                   fill_value=np.nan, \n",
    "                                   range_by_group=True, \n",
    "                                   freq='4H')\n",
    "test_eq(expected_output_df, output_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>id</th>\n",
       "      <th>feature1</th>\n",
       "      <th>feature2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-05-01 00:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-05-01 04:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-05-01 08:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.795633</td>\n",
       "      <td>0.296898</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-05-01 12:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2021-05-01 16:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.968405</td>\n",
       "      <td>0.654058</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2021-05-01 20:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.132000</td>\n",
       "      <td>0.469576</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2021-05-01 00:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.650885</td>\n",
       "      <td>0.622190</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2021-05-01 04:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.040657</td>\n",
       "      <td>0.237668</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2021-05-01 08:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2021-05-01 12:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>2021-05-01 16:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.055866</td>\n",
       "      <td>0.254711</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>2021-05-01 20:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  date  id  feature1  feature2\n",
       "0  2021-05-01 00:00:00   0       NaN       NaN\n",
       "1  2021-05-01 04:00:00   0       NaN       NaN\n",
       "2  2021-05-01 08:00:00   0  0.795633  0.296898\n",
       "3  2021-05-01 12:00:00   0       NaN       NaN\n",
       "4  2021-05-01 16:00:00   0  0.968405  0.654058\n",
       "5  2021-05-01 20:00:00   0  0.132000  0.469576\n",
       "6  2021-05-01 00:00:00   1  0.650885  0.622190\n",
       "7  2021-05-01 04:00:00   1  0.040657  0.237668\n",
       "8  2021-05-01 08:00:00   1       NaN       NaN\n",
       "9  2021-05-01 12:00:00   1       NaN       NaN\n",
       "10 2021-05-01 16:00:00   1  0.055866  0.254711\n",
       "11 2021-05-01 20:00:00   1       NaN       NaN"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# groupby='id', range_by_group=False\n",
    "expected_output_df = date_df.copy() \n",
    "expected_output_df.loc[[0,1,3,8,9,11], ['feature1', 'feature2']] = np.nan\n",
    "display(expected_output_df)\n",
    "output_df = add_missing_timestamps(date_df_with_missing_dates, \n",
    "                                   'date', \n",
    "                                   groupby='id', \n",
    "                                   fill_value=np.nan, \n",
    "                                   range_by_group=False, \n",
    "                                   freq='4H')\n",
    "test_eq(expected_output_df, output_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>feature1</th>\n",
       "      <th>feature2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-05-01 00:00:00</td>\n",
       "      <td>0.250907</td>\n",
       "      <td>0.965406</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-05-01 08:00:00</td>\n",
       "      <td>0.846068</td>\n",
       "      <td>0.045838</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-05-01 16:00:00</td>\n",
       "      <td>0.338036</td>\n",
       "      <td>0.954646</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-05-01 16:00:00</td>\n",
       "      <td>0.749792</td>\n",
       "      <td>0.452075</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 date  feature1  feature2\n",
       "0 2021-05-01 00:00:00  0.250907  0.965406\n",
       "1 2021-05-01 08:00:00  0.846068  0.045838\n",
       "2 2021-05-01 16:00:00  0.338036  0.954646\n",
       "3 2021-05-01 16:00:00  0.749792  0.452075"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# No groups, with duplicate dates ==> FAILS\n",
    "dates = pd.date_range('2021-05-01 000:00', '2021-05-01 20:00', freq='4H').values\n",
    "data = np.zeros((len(dates), 3))\n",
    "data[:, 0] = dates\n",
    "data[:, 1] = np.random.rand(len(dates))\n",
    "data[:, 2] = np.random.rand(len(dates))\n",
    "cols = ['date', 'feature1', 'feature2']\n",
    "date_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'feature1': float, 'feature2': float})\n",
    "date_df_with_missing_dates = date_df.drop([1,3]).reset_index(drop=True)\n",
    "date_df_with_missing_dates.loc[3, 'date'] = date_df_with_missing_dates.loc[2, 'date']\n",
    "display(date_df_with_missing_dates)\n",
    "test_fail(add_missing_timestamps, args=[date_df_with_missing_dates, 'date'], kwargs=dict(groupby=None, fill_value=np.nan, range_by_group=False, freq='4H'), \n",
    "          contains='cannot reindex from a duplicate axis')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>id</th>\n",
       "      <th>feature1</th>\n",
       "      <th>feature2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-05-01 08:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.462174</td>\n",
       "      <td>0.933420</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-05-01 12:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.748958</td>\n",
       "      <td>0.153208</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-05-01 16:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.241910</td>\n",
       "      <td>0.920466</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-05-01 16:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.189210</td>\n",
       "      <td>0.319617</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2021-05-01 00:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.263759</td>\n",
       "      <td>0.105668</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2021-05-01 04:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.115575</td>\n",
       "      <td>0.365087</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2021-05-01 16:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.491920</td>\n",
       "      <td>0.411007</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 date  id  feature1  feature2\n",
       "0 2021-05-01 08:00:00   0  0.462174  0.933420\n",
       "1 2021-05-01 12:00:00   0  0.748958  0.153208\n",
       "2 2021-05-01 16:00:00   0  0.241910  0.920466\n",
       "3 2021-05-01 16:00:00   0  0.189210  0.319617\n",
       "4 2021-05-01 00:00:00   1  0.263759  0.105668\n",
       "5 2021-05-01 04:00:00   1  0.115575  0.365087\n",
       "6 2021-05-01 16:00:00   1  0.491920  0.411007"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# groupby='id', range_by_group=True, with duplicate dates ==> FAILS\n",
    "\n",
    "dates = pd.date_range('2021-05-01 000:00', '2021-05-01 20:00', freq='4H').values\n",
    "dates = np.concatenate((dates, dates))\n",
    "data = np.zeros((len(dates), 4))\n",
    "data[:, 0] = dates\n",
    "data[:, 1] = np.array([0]*(len(dates)//2)+[1]*(len(dates)//2))\n",
    "data[:, 2] = np.random.rand(len(dates))\n",
    "data[:, 3] = np.random.rand(len(dates))\n",
    "cols = ['date', 'id', 'feature1', 'feature2']\n",
    "date_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'id': int, 'feature1': float, 'feature2': float})\n",
    "date_df_with_missing_dates = date_df.drop([0,1,8,9,11]).reset_index(drop=True)\n",
    "date_df_with_missing_dates.loc[3, 'date'] = date_df_with_missing_dates.loc[2, 'date']\n",
    "display(date_df_with_missing_dates)\n",
    "test_fail(add_missing_timestamps, args=[date_df_with_missing_dates, 'date'], kwargs=dict(groupby='id', fill_value=np.nan, range_by_group=True, freq='4H'), \n",
    "          contains='cannot handle a non-unique multi-index!')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>id</th>\n",
       "      <th>feature1</th>\n",
       "      <th>feature2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-05-01 08:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.663514</td>\n",
       "      <td>0.439459</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-05-01 12:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.662052</td>\n",
       "      <td>0.106350</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-05-01 16:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.358776</td>\n",
       "      <td>0.164377</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-05-01 16:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.908822</td>\n",
       "      <td>0.877258</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2021-05-01 00:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.932823</td>\n",
       "      <td>0.294688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2021-05-01 04:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.786879</td>\n",
       "      <td>0.063408</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2021-05-01 16:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.233234</td>\n",
       "      <td>0.706419</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 date  id  feature1  feature2\n",
       "0 2021-05-01 08:00:00   0  0.663514  0.439459\n",
       "1 2021-05-01 12:00:00   0  0.662052  0.106350\n",
       "2 2021-05-01 16:00:00   0  0.358776  0.164377\n",
       "3 2021-05-01 16:00:00   0  0.908822  0.877258\n",
       "4 2021-05-01 00:00:00   1  0.932823  0.294688\n",
       "5 2021-05-01 04:00:00   1  0.786879  0.063408\n",
       "6 2021-05-01 16:00:00   1  0.233234  0.706419"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# groupby='id', range_by_group=FALSE, with duplicate dates ==> FAILS\n",
    "\n",
    "dates = pd.date_range('2021-05-01 000:00', '2021-05-01 20:00', freq='4H').values\n",
    "dates = np.concatenate((dates, dates))\n",
    "data = np.zeros((len(dates), 4))\n",
    "data[:, 0] = dates\n",
    "data[:, 1] = np.array([0]*(len(dates)//2)+[1]*(len(dates)//2))\n",
    "data[:, 2] = np.random.rand(len(dates))\n",
    "data[:, 3] = np.random.rand(len(dates))\n",
    "cols = ['date', 'id', 'feature1', 'feature2']\n",
    "date_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'id': int, 'feature1': float, 'feature2': float})\n",
    "date_df_with_missing_dates = date_df.drop([0,1,8,9,11]).reset_index(drop=True)\n",
    "date_df_with_missing_dates.loc[3, 'date'] = date_df_with_missing_dates.loc[2, 'date']\n",
    "display(date_df_with_missing_dates)\n",
    "test_fail(add_missing_timestamps, args=[date_df_with_missing_dates, 'date'], kwargs=dict(groupby='id', fill_value=np.nan, range_by_group=False, freq='4H'), \n",
    "          contains='cannot handle a non-unique multi-index!')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# export\n",
    "def time_encoding(series, freq, max_val=None):\n",
    "    \"\"\"Transforms a pandas series of dtype datetime64 (of any freq) or DatetimeIndex into 2 float arrays\n",
    "    \n",
    "    Available options: microsecond, millisecond, second, minute, hour, day = day_of_month = dayofmonth, \n",
    "    day_of_week = weekday = dayofweek, day_of_year = dayofyear, week = week_of_year = weekofyear, month and year\n",
    "    \"\"\"\n",
    "\n",
    "    if freq == 'day_of_week' or freq == 'weekday': freq = 'dayofweek'\n",
    "    elif freq == 'day_of_month' or freq == 'dayofmonth': freq = 'day'\n",
    "    elif freq == 'day_of_year': freq = 'dayofyear'\n",
    "    available_freqs = ['microsecond', 'millisecond', 'second', 'minute', 'hour', 'day', 'dayofweek', 'dayofyear', 'week', 'month', 'year']\n",
    "    assert freq in available_freqs\n",
    "    if max_val is None:\n",
    "        idx = available_freqs.index(freq)\n",
    "        max_val = [1_000_000, 1_000, 60, 60, 24, 31, 7, 366, 53, 12, 10][idx]\n",
    "    try:\n",
    "        series = series.to_series()\n",
    "    except:\n",
    "        pass\n",
    "    if freq == 'microsecond': series = series.dt.microsecond\n",
    "    elif freq == 'millisecond': series = series.dt.microsecond // 1_000\n",
    "    elif freq == 'second': series = series.dt.second\n",
    "    elif freq == 'minute': series = series.dt.minute\n",
    "    elif freq == 'hour': series = series.dt.hour\n",
    "    elif freq == 'day': series = series.dt.day\n",
    "    elif freq == 'dayofweek': series = series.dt.dayofweek\n",
    "    elif freq == 'dayofyear': series = series.dt.dayofyear\n",
    "    elif freq == 'week': series = series.dt.isocalendar().week\n",
    "    elif freq == 'month': series = series.dt.month\n",
    "    elif freq == 'year': series = series.dt.year - series.dt.year // 10 * 10\n",
    "    sin = np.sin(series.values / max_val * 2 * np.pi)\n",
    "    cos = np.cos(series.values / max_val * 2 * np.pi)\n",
    "    return sin, cos"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for freq in ['microsecond', 'second', 'minute', 'hour', 'day', 'dayofweek', 'dayofyear', 'month']:\n",
    "    tdf = pd.DataFrame(pd.date_range('2021-03-01', datetime.today()), columns=['date'])\n",
    "    a,b = time_encoding(tdf.date, freq=freq)\n",
    "    plt.plot(a)\n",
    "    plt.plot(b)\n",
    "    plt.title(freq)\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for freq in ['microsecond', 'second', 'minute', 'hour', 'day', 'dayofweek', 'dayofyear', 'month']:\n",
    "    dateindex = pd.date_range('2021-03-01', datetime.today())\n",
    "    a,b = time_encoding(dateindex, freq=freq)\n",
    "    plt.plot(a)\n",
    "    plt.plot(b)\n",
    "    plt.title(freq)\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>id</th>\n",
       "      <th>feature1</th>\n",
       "      <th>feature2</th>\n",
       "      <th>dow_sin</th>\n",
       "      <th>dow_cos</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-05-01 00:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.919966</td>\n",
       "      <td>0.457696</td>\n",
       "      <td>-0.974928</td>\n",
       "      <td>-0.222521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-05-01 04:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.731663</td>\n",
       "      <td>0.014716</td>\n",
       "      <td>-0.974928</td>\n",
       "      <td>-0.222521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-05-01 08:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.663514</td>\n",
       "      <td>0.439459</td>\n",
       "      <td>-0.974928</td>\n",
       "      <td>-0.222521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-05-01 12:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.662052</td>\n",
       "      <td>0.106350</td>\n",
       "      <td>-0.974928</td>\n",
       "      <td>-0.222521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2021-05-01 16:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.358776</td>\n",
       "      <td>0.164377</td>\n",
       "      <td>-0.974928</td>\n",
       "      <td>-0.222521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2021-05-01 20:00:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0.908822</td>\n",
       "      <td>0.877258</td>\n",
       "      <td>-0.974928</td>\n",
       "      <td>-0.222521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2021-05-01 00:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.932823</td>\n",
       "      <td>0.294688</td>\n",
       "      <td>-0.974928</td>\n",
       "      <td>-0.222521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2021-05-01 04:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.786879</td>\n",
       "      <td>0.063408</td>\n",
       "      <td>-0.974928</td>\n",
       "      <td>-0.222521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2021-05-01 08:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.136083</td>\n",
       "      <td>0.616008</td>\n",
       "      <td>-0.974928</td>\n",
       "      <td>-0.222521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2021-05-01 12:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.015671</td>\n",
       "      <td>0.223310</td>\n",
       "      <td>-0.974928</td>\n",
       "      <td>-0.222521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>2021-05-01 16:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.233234</td>\n",
       "      <td>0.706419</td>\n",
       "      <td>-0.974928</td>\n",
       "      <td>-0.222521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>2021-05-01 20:00:00</td>\n",
       "      <td>1</td>\n",
       "      <td>0.013097</td>\n",
       "      <td>0.901210</td>\n",
       "      <td>-0.974928</td>\n",
       "      <td>-0.222521</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  date  id  feature1  feature2   dow_sin   dow_cos\n",
       "0  2021-05-01 00:00:00   0  0.919966  0.457696 -0.974928 -0.222521\n",
       "1  2021-05-01 04:00:00   0  0.731663  0.014716 -0.974928 -0.222521\n",
       "2  2021-05-01 08:00:00   0  0.663514  0.439459 -0.974928 -0.222521\n",
       "3  2021-05-01 12:00:00   0  0.662052  0.106350 -0.974928 -0.222521\n",
       "4  2021-05-01 16:00:00   0  0.358776  0.164377 -0.974928 -0.222521\n",
       "5  2021-05-01 20:00:00   0  0.908822  0.877258 -0.974928 -0.222521\n",
       "6  2021-05-01 00:00:00   1  0.932823  0.294688 -0.974928 -0.222521\n",
       "7  2021-05-01 04:00:00   1  0.786879  0.063408 -0.974928 -0.222521\n",
       "8  2021-05-01 08:00:00   1  0.136083  0.616008 -0.974928 -0.222521\n",
       "9  2021-05-01 12:00:00   1  0.015671  0.223310 -0.974928 -0.222521\n",
       "10 2021-05-01 16:00:00   1  0.233234  0.706419 -0.974928 -0.222521\n",
       "11 2021-05-01 20:00:00   1  0.013097  0.901210 -0.974928 -0.222521"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dow_sin, dow_cos = time_encoding(date_df['date'], 'dayofweek')\n",
    "plt.plot(dow_sin)\n",
    "plt.plot(dow_cos)\n",
    "plt.title('DayOfWeek')\n",
    "plt.show()\n",
    "date_df['dow_sin'] = dow_sin\n",
    "date_df['dow_cos'] = dow_cos\n",
    "date_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# export\n",
    "\n",
    "def forward_gaps(o, nan_to_num=0, normalize=True):\n",
    "    \"\"\"Number of sequence steps since previous real value along the last dimension of 3D arrays or tensors\"\"\"\n",
    "\n",
    "    b,c,s=o.shape\n",
    "    if isinstance(o, torch.Tensor):\n",
    "        idx = torch.where(o==o, torch.arange(s, device=o.device), 0)\n",
    "        idx = torch.cummax(idx, axis=-1).values\n",
    "        gaps = 1 + (torch.arange(s, device=o.device).reshape(1,1,-1).repeat(b, c, 1) - idx).float()\n",
    "        mask = torch.isnan(o[torch.arange(b, device=o.device)[:,None, None], torch.arange(c, device=o.device)[None, :, None], idx])\n",
    "    elif isinstance(o, np.ndarray):\n",
    "        idx = np.where(o==o, np.arange(s), 0)\n",
    "        idx = np.maximum.accumulate(idx,axis=-1)\n",
    "        gaps = 1 + (np.arange(s).reshape(1,1,-1).repeat(b, 0).repeat(c, 1) - idx).astype(float)\n",
    "        mask = np.isnan(o[np.arange(b)[:,None, None], np.arange(c)[None, :, None], idx])\n",
    "    gaps[mask] = nan_to_num\n",
    "    if normalize:\n",
    "        gaps[gaps > 0] = gaps[gaps > 0] / s\n",
    "    return gaps\n",
    "\n",
    "\n",
    "def backward_gaps(o, nan_to_num=0, normalize=True):\n",
    "    \"\"\"Number of sequence steps to next real value along the last dimension of 3D arrays or tensors\"\"\"\n",
    "\n",
    "    if isinstance(o, torch.Tensor): o = torch_flip(o, -1)\n",
    "    elif isinstance(o, np.ndarray): o = o[..., ::-1]\n",
    "    gaps = forward_gaps(o, nan_to_num=nan_to_num, normalize=normalize)\n",
    "    if isinstance(o, torch.Tensor): gaps = torch_flip(gaps, -1)\n",
    "    elif isinstance(o, np.ndarray): gaps = gaps[..., ::-1]\n",
    "    return gaps\n",
    "\n",
    "\n",
    "def nearest_gaps(o, nan_to_num=0, normalize=True):\n",
    "    \"\"\"Number of sequence steps to nearest real value along the last dimension of 3D arrays or tensors\"\"\"\n",
    "\n",
    "    forward = forward_gaps(o, nan_to_num=np.nan, normalize=normalize)\n",
    "    backward = backward_gaps(o, nan_to_num=np.nan, normalize=normalize)\n",
    "    if isinstance(o, torch.Tensor):\n",
    "        gaps = torch.fmin(forward, backward)\n",
    "        gaps[torch.isnan(gaps)] = nan_to_num\n",
    "        return gaps\n",
    "    elif isinstance(o, np.ndarray):\n",
    "        gaps = np.fmin(forward, backward)\n",
    "        gaps[np.isnan(gaps)] = nan_to_num\n",
    "        return gaps\n",
    "\n",
    "\n",
    "def get_gaps(o : Tensor, nan_to_num : int = 0, forward : bool = True, backward : bool = True, \n",
    "             nearest : bool = True, normalize : bool = True):\n",
    "    \"\"\"Number of sequence steps from previous, to next and/or to nearest real value along the \n",
    "    last dimension of 3D arrays or tensors\"\"\"\n",
    "    \n",
    "    _gaps = []\n",
    "    if forward or nearest:  \n",
    "        fwd = forward_gaps(o, nan_to_num=np.nan, normalize=normalize)\n",
    "        if forward: \n",
    "            _gaps.append(fwd)\n",
    "    if backward or nearest: \n",
    "        bwd = backward_gaps(o, nan_to_num=np.nan, normalize=normalize)\n",
    "        if backward: \n",
    "            _gaps.append(bwd)\n",
    "    if nearest:\n",
    "        if isinstance(o, torch.Tensor): \n",
    "            nst = torch.fmin(fwd, bwd)\n",
    "        elif isinstance(o, np.ndarray): \n",
    "            nst = np.fmin(fwd, bwd)\n",
    "        _gaps.append(nst)\n",
    "    if isinstance(o, torch.Tensor): \n",
    "        gaps = torch.cat(_gaps, 1)\n",
    "        gaps[torch.isnan(gaps)] = nan_to_num\n",
    "    elif isinstance(o, np.ndarray):\n",
    "        gaps = np.concatenate(_gaps, 1)\n",
    "        gaps[np.isnan(gaps)] = nan_to_num\n",
    "    return gaps"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "t = torch.rand(1, 2, 8)\n",
    "arr = t.numpy()\n",
    "t[t <.6] = np.nan\n",
    "test_ge(nearest_gaps(t).min().item(), 0)\n",
    "test_ge(nearest_gaps(arr).min(), 0)\n",
    "test_le(nearest_gaps(t).min().item(), 1)\n",
    "test_le(nearest_gaps(arr).min(), 1)\n",
    "test_eq(torch.isnan(forward_gaps(t)).sum(), 0)\n",
    "test_eq(np.isnan(forward_gaps(arr)).sum(), 0)\n",
    "ag = get_gaps(t)\n",
    "test_eq(ag.shape, (1,6,8))\n",
    "test_eq(torch.isnan(ag).sum(), 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# export\n",
    "\n",
    "def add_delta_timestamp_cols(df, cols=None, groupby=None, forward=True, backward=True, nearest=True, nan_to_num=0, normalize=True):\n",
    "    if cols is None: cols = df.columns\n",
    "    elif not is_listy(cols): cols = [cols]\n",
    "    if forward or nearest:\n",
    "        if groupby:\n",
    "            forward_time_gaps = df[cols].groupby(df[groupby]).apply(lambda x: forward_gaps(x.values.transpose(1,0)[None], nan_to_num=np.nan, normalize=normalize))\n",
    "            forward_time_gaps = np.concatenate(forward_time_gaps, -1)[0].transpose(1,0)\n",
    "        else:\n",
    "            forward_time_gaps = forward_gaps(df[cols].values.transpose(1,0)[None], nan_to_num=np.nan, normalize=normalize)[0].transpose(1,0)\n",
    "        if forward : \n",
    "            df[[f'{col}_dt_fwd' for col in cols]] = forward_time_gaps\n",
    "            df[[f'{col}_dt_fwd' for col in cols]] = df[[f'{col}_dt_fwd' for col in cols]].fillna(nan_to_num)\n",
    "    if backward or nearest:\n",
    "        if groupby:\n",
    "            backward_time_gaps = df[cols].groupby(df[groupby]).apply(lambda x: backward_gaps(x.values.transpose(1,0)[None], nan_to_num=np.nan, normalize=normalize))\n",
    "            backward_time_gaps = np.concatenate(backward_time_gaps, -1)[0].transpose(1,0)\n",
    "        else:\n",
    "            backward_time_gaps = backward_gaps(df[cols].values.transpose(1,0)[None], nan_to_num=np.nan, normalize=normalize)[0].transpose(1,0)\n",
    "        if backward: \n",
    "            df[[f'{col}_dt_bwd' for col in cols]] = backward_time_gaps\n",
    "            df[[f'{col}_dt_bwd' for col in cols]] = df[[f'{col}_dt_bwd' for col in cols]].fillna(nan_to_num)\n",
    "    if nearest:\n",
    "        df[[f'{col}_dt_nearest' for col in cols]] = np.fmin(forward_time_gaps, backward_time_gaps)\n",
    "        df[[f'{col}_dt_nearest' for col in cols]] = df[[f'{col}_dt_nearest' for col in cols]].fillna(nan_to_num)\n",
    "    return df\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Add delta timestamp features for the no groups setting\n",
    "dates = pd.date_range('2021-05-01', '2021-05-07').values\n",
    "data = np.zeros((len(dates), 2))\n",
    "data[:, 0] = dates\n",
    "data[:, 1] = np.random.rand(len(dates))\n",
    "\n",
    "cols = ['date', 'feature1']\n",
    "date_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'feature1': float})\n",
    "date_df.loc[[1,3,4],'feature1'] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>feature1</th>\n",
       "      <th>feature1_dt_fwd</th>\n",
       "      <th>feature1_dt_bwd</th>\n",
       "      <th>feature1_dt_nearest</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-05-01</td>\n",
       "      <td>0.271697</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-05-02</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.285714</td>\n",
       "      <td>0.285714</td>\n",
       "      <td>0.285714</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-05-03</td>\n",
       "      <td>0.545554</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-05-04</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.285714</td>\n",
       "      <td>0.428571</td>\n",
       "      <td>0.285714</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2021-05-05</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.428571</td>\n",
       "      <td>0.285714</td>\n",
       "      <td>0.285714</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2021-05-06</td>\n",
       "      <td>0.289601</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2021-05-07</td>\n",
       "      <td>0.410591</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        date  feature1  feature1_dt_fwd  feature1_dt_bwd  feature1_dt_nearest\n",
       "0 2021-05-01  0.271697         0.142857         0.142857             0.142857\n",
       "1 2021-05-02       NaN         0.285714         0.285714             0.285714\n",
       "2 2021-05-03  0.545554         0.142857         0.142857             0.142857\n",
       "3 2021-05-04       NaN         0.285714         0.428571             0.285714\n",
       "4 2021-05-05       NaN         0.428571         0.285714             0.285714\n",
       "5 2021-05-06  0.289601         0.142857         0.142857             0.142857\n",
       "6 2021-05-07  0.410591         0.142857         0.142857             0.142857"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# No groups\n",
    "\n",
    "normalize = 1/len(dates)\n",
    "expected_output_df = date_df.copy()\n",
    "expected_output_df['feature1_dt_fwd'] = normalize\n",
    "expected_output_df.loc[[1,3,4], 'feature1_dt_fwd'] = np.array([2,2,3]) * normalize\n",
    "\n",
    "expected_output_df['feature1_dt_bwd'] = normalize\n",
    "expected_output_df.loc[[1,3,4], 'feature1_dt_bwd'] = np.array([2,3,2]) * normalize\n",
    "\n",
    "expected_output_df['feature1_dt_nearest'] = normalize\n",
    "expected_output_df.loc[[1,3,4], 'feature1_dt_nearest'] =np.array([2,2,2]) * normalize\n",
    "\n",
    "display(expected_output_df)\n",
    "output_df = add_delta_timestamp_cols(date_df, cols='feature1')\n",
    "test_eq(expected_output_df, output_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Add delta timestamp features within a group\n",
    "dates = pd.date_range('2021-05-01', '2021-05-07').values\n",
    "dates = np.concatenate((dates, dates))\n",
    "data = np.zeros((len(dates), 3))\n",
    "data[:, 0] = dates\n",
    "data[:, 1] = np.array([0]*(len(dates)//2)+[1]*(len(dates)//2))\n",
    "data[:, 2] = np.random.rand(len(dates))\n",
    "\n",
    "cols = ['date', 'id', 'feature1']\n",
    "date_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'id': int, 'feature1': float})\n",
    "date_df.loc[[1,3,4,8,9,11],'feature1'] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>id</th>\n",
       "      <th>feature1</th>\n",
       "      <th>feature1_dt_fwd</th>\n",
       "      <th>feature1_dt_bwd</th>\n",
       "      <th>feature1_dt_nearest</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-05-01</td>\n",
       "      <td>0</td>\n",
       "      <td>0.679742</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-05-02</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.285714</td>\n",
       "      <td>0.285714</td>\n",
       "      <td>0.285714</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-05-03</td>\n",
       "      <td>0</td>\n",
       "      <td>0.781253</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-05-04</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.285714</td>\n",
       "      <td>0.428571</td>\n",
       "      <td>0.285714</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2021-05-05</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.428571</td>\n",
       "      <td>0.285714</td>\n",
       "      <td>0.285714</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2021-05-06</td>\n",
       "      <td>0</td>\n",
       "      <td>0.484430</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2021-05-07</td>\n",
       "      <td>0</td>\n",
       "      <td>0.759332</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2021-05-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0.859231</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2021-05-02</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.285714</td>\n",
       "      <td>0.428571</td>\n",
       "      <td>0.285714</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2021-05-03</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.428571</td>\n",
       "      <td>0.285714</td>\n",
       "      <td>0.285714</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>2021-05-04</td>\n",
       "      <td>1</td>\n",
       "      <td>0.167406</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>2021-05-05</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.285714</td>\n",
       "      <td>0.285714</td>\n",
       "      <td>0.285714</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2021-05-06</td>\n",
       "      <td>1</td>\n",
       "      <td>0.279209</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>2021-05-07</td>\n",
       "      <td>1</td>\n",
       "      <td>0.507666</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "      <td>0.142857</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         date  id  feature1  feature1_dt_fwd  feature1_dt_bwd  \\\n",
       "0  2021-05-01   0  0.679742         0.142857         0.142857   \n",
       "1  2021-05-02   0       NaN         0.285714         0.285714   \n",
       "2  2021-05-03   0  0.781253         0.142857         0.142857   \n",
       "3  2021-05-04   0       NaN         0.285714         0.428571   \n",
       "4  2021-05-05   0       NaN         0.428571         0.285714   \n",
       "5  2021-05-06   0  0.484430         0.142857         0.142857   \n",
       "6  2021-05-07   0  0.759332         0.142857         0.142857   \n",
       "7  2021-05-01   1  0.859231         0.142857         0.142857   \n",
       "8  2021-05-02   1       NaN         0.285714         0.428571   \n",
       "9  2021-05-03   1       NaN         0.428571         0.285714   \n",
       "10 2021-05-04   1  0.167406         0.142857         0.142857   \n",
       "11 2021-05-05   1       NaN         0.285714         0.285714   \n",
       "12 2021-05-06   1  0.279209         0.142857         0.142857   \n",
       "13 2021-05-07   1  0.507666         0.142857         0.142857   \n",
       "\n",
       "    feature1_dt_nearest  \n",
       "0              0.142857  \n",
       "1              0.285714  \n",
       "2              0.142857  \n",
       "3              0.285714  \n",
       "4              0.285714  \n",
       "5              0.142857  \n",
       "6              0.142857  \n",
       "7              0.142857  \n",
       "8              0.285714  \n",
       "9              0.285714  \n",
       "10             0.142857  \n",
       "11             0.285714  \n",
       "12             0.142857  \n",
       "13             0.142857  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# groupby='id'\n",
    "\n",
    "normalize = 2/len(dates)\n",
    "expected_output_df = date_df.copy()\n",
    "expected_output_df['feature1_dt_fwd'] = normalize\n",
    "expected_output_df.loc[[1,3,4,8,9,11], 'feature1_dt_fwd'] = np.array([2,2,3,2,3,2]) * normalize\n",
    "\n",
    "expected_output_df['feature1_dt_bwd'] = normalize\n",
    "expected_output_df.loc[[1,3,4,8,9,11], 'feature1_dt_bwd'] = np.array([2,3,2,3,2,2]) * normalize\n",
    "\n",
    "expected_output_df['feature1_dt_nearest'] = normalize\n",
    "expected_output_df.loc[[1,3,4,8,9,11], 'feature1_dt_nearest'] =np.array([2,2,2,2,2,2]) * normalize\n",
    "\n",
    "display(expected_output_df)\n",
    "output_df = add_delta_timestamp_cols(date_df, cols='feature1', groupby='id')\n",
    "test_eq(expected_output_df, output_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# export\n",
    "# # SlidingWindow vectorization is based on \"Fast and Robust Sliding Window Vectorization with NumPy\" by Syafiq Kamarul Azman\n",
    "# # https://towardsdatascience.com/fast-and-robust-sliding-window-vectorization-with-numpy-3ad950ed62f5\n",
    "\n",
    "def SlidingWindow(window_len:int, stride:Union[None, int]=1, start:int=0, pad_remainder:bool=False, padding_value:float=np.nan, add_padding_feature:bool=True,\n",
    "                  get_x:Union[None, int, list]=None, get_y:Union[None, int, list]=None, y_func:Optional[callable]=None, copy:bool=False,\n",
    "                  horizon:Union[int, list]=1, seq_first:bool=True, sort_by:Optional[list]=None, ascending:bool=True, check_leakage:bool=True):\n",
    "\n",
    "    \"\"\"\n",
    "    Applies a sliding window to a 1d or 2d input (np.ndarray, torch.Tensor or pd.DataFrame)\n",
    "    Args:\n",
    "        window_len          = length of lookback window\n",
    "        stride              = n datapoints the window is moved ahead along the sequence. Default: 1. If None, stride=window_len (no overlap)\n",
    "        start               = determines the step where the first window is applied: 0 (default), a given step (int), or random within the 1st stride (None).\n",
    "        pad_remainder       = allows to pad remainder subsequences when the sliding window is applied and get_y == [] (unlabeled data).\n",
    "        padding_value       = value (float) that will be used for padding. Default: np.nan\n",
    "        add_padding_feature = add an additional feature indicating whether each timestep is padded (1) or not (0).\n",
    "        horizon             = number of future datapoints to predict:\n",
    "                            * 0 for last step in each sub-window.\n",
    "                            * n > 0 for a range of n future steps (1 to n).\n",
    "                            * n < 0 for a range of n past steps (-n + 1 to 0).\n",
    "                            * list : for those exact timesteps.\n",
    "        get_x               = indices of columns that contain the independent variable (xs). If None, all data will be used as x.\n",
    "        get_y               = indices of columns that contain the target (ys). If None, all data will be used as y.\n",
    "                            [] means no y data is created (unlabeled data).\n",
    "        y_func              = function to calculate the ys based on the get_y col/s and each y sub-window. y_func must be a function applied to axis=1!\n",
    "        copy                = copy the original object to avoid changes in it.\n",
    "        seq_first           = True if input shape (seq_len, n_vars), False if input shape (n_vars, seq_len)\n",
    "        sort_by             = column/s used for sorting the array in ascending order\n",
    "        ascending           = used in sorting\n",
    "        check_leakage       = checks if there's leakage in the output between X and y\n",
    "    Input:\n",
    "        You can use np.ndarray, pd.DataFrame or torch.Tensor as input\n",
    "        shape: (seq_len, ) or (seq_len, n_vars) if seq_first=True else (n_vars, seq_len)\n",
    "    \"\"\"\n",
    "\n",
    "    if horizon == 0: horizon_rng = np.array([0])\n",
    "    elif is_listy(horizon): horizon_rng = np.array(horizon)\n",
    "    elif isinstance(horizon, Integral): horizon_rng = np.arange(1, horizon + 1) if horizon > 0 else np.arange(horizon + 1, 1)\n",
    "    min_horizon = min(horizon_rng)\n",
    "    max_horizon = max(horizon_rng)\n",
    "    _get_x = slice(None) if get_x is None else get_x.tolist() if isinstance(get_x, pd.core.indexes.base.Index) else [get_x] if not is_listy(get_x) else get_x\n",
    "    _get_y = slice(None) if get_y is None else get_y.tolist() if isinstance(get_y, pd.core.indexes.base.Index) else [get_y] if not is_listy(get_y) else get_y\n",
    "    if min_horizon <= 0 and y_func is None and get_y != [] and check_leakage:\n",
    "        assert get_x is not None and  get_y is not None and len([y for y in _get_y if y in _get_x]) == 0,  \\\n",
    "        'you need to change either horizon, get_x, get_y or use a y_func to avoid leakage'\n",
    "    if stride == 0 or stride is None:\n",
    "        stride = window_len\n",
    "\n",
    "    def _inner(o):\n",
    "        if copy: \n",
    "            if isinstance(o, torch.Tensor):  o = o.clone()\n",
    "            else: o = o.copy()\n",
    "        if not seq_first: o = o.T\n",
    "        if isinstance(o, pd.DataFrame):\n",
    "            if sort_by is not None: o.sort_values(by=sort_by, axis=0, ascending=ascending, inplace=True, ignore_index=True)\n",
    "            if get_x is None: X = o.values\n",
    "            elif isinstance(_get_x, str) or (is_listy(_get_x) and isinstance(_get_x[0], str)): X = o.loc[:, _get_x].values\n",
    "            else: X = o.iloc[:, _get_x].values\n",
    "            if get_y == []: y = None\n",
    "            elif get_y is None: y = o.values \n",
    "            elif isinstance(_get_y, str) or (is_listy(_get_y) and isinstance(_get_y[0], str)): y = o.loc[:, _get_y].values  \n",
    "            else: y = o.iloc[:, _get_y].values\n",
    "        else:\n",
    "            if isinstance(o, torch.Tensor): o = o.numpy()\n",
    "            if o.ndim < 2: o = o[:, None]\n",
    "            if get_x is None: X = o\n",
    "            else: X = o[:, _get_x]\n",
    "            if get_y == []: y = None\n",
    "            elif get_y is None: y = o\n",
    "            else: y = o[:, _get_y]\n",
    "        seq_len = len(X)\n",
    "        if get_y != []:\n",
    "            X_max_time = seq_len - start - window_len - max_horizon - pad_remainder\n",
    "        else:\n",
    "            X_max_time = seq_len - start - window_len - pad_remainder\n",
    "        if pad_remainder:\n",
    "            if add_padding_feature:\n",
    "                X = np.concatenate([X, np.zeros((X.shape[0], 1))], axis=1)\n",
    "            X_max_time = X_max_time - X_max_time % stride + stride\n",
    "            if window_len + start + X_max_time - len(X) >= 0:\n",
    "                _X = np.empty((window_len + start + X_max_time - len(X), *X.shape[1:]))\n",
    "                _X[:] = padding_value\n",
    "                if add_padding_feature:\n",
    "                    _X[:, -1] = 1\n",
    "                X = np.concatenate((X, _X))\n",
    "        elif X_max_time < 0: return None, None\n",
    "        X_sub_windows = (start +\n",
    "                         np.expand_dims(np.arange(window_len), 0) + # window len\n",
    "                         np.expand_dims(np.arange(X_max_time + 1, step=stride), 0).T\n",
    "                        ) # # subwindows\n",
    "        X = np.transpose(X[X_sub_windows], (0, 2, 1))\n",
    "        if get_y != [] and y is not None:\n",
    "            y_start = start + window_len - 1\n",
    "            y_max_time = seq_len - y_start - max_horizon - pad_remainder\n",
    "            div = 0\n",
    "            if pad_remainder:\n",
    "                div = y_max_time % stride\n",
    "                y_max_time = y_max_time - y_max_time % stride + stride\n",
    "                if window_len + start + y_max_time - len(y) >= 0:\n",
    "                    _y = np.empty((window_len + start + y_max_time - len(y), *y.shape[1:]))\n",
    "                    _y[:] = padding_value\n",
    "                    y = np.concatenate((y, _y))\n",
    "            y_sub_windows = (y_start +\n",
    "                             np.expand_dims(horizon_rng, 0) + # horizon_rng\n",
    "                             np.expand_dims(np.arange(y_max_time + div, step=stride), 0).T\n",
    "                            ) # # subwindows\n",
    "            y = y[y_sub_windows]\n",
    "            if y_func is not None and len(y) > 0:\n",
    "                y = y_func(y)\n",
    "            if y.ndim >= 2:\n",
    "                for d in np.arange(1, y.ndim)[::-1]:\n",
    "                    if y.shape[d] == 1: y = np.squeeze(y, axis=d)\n",
    "            if y.ndim == 3:\n",
    "                y = y.transpose(0, 2, 1)\n",
    "            return X, y\n",
    "        else: return X, None\n",
    "    return _inner\n",
    "\n",
    "SlidingWindowSplitter = SlidingWindow"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input shape: (13, 3)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[[ 0.,  1.,  2.,  3.,  4.],\n",
       "        [ 0.,  1.,  2.,  3.,  4.],\n",
       "        [ 0.,  1.,  2.,  3.,  4.],\n",
       "        [ 0.,  0.,  0.,  0.,  0.]],\n",
       "\n",
       "       [[ 5.,  6.,  7.,  8.,  9.],\n",
       "        [ 5.,  6.,  7.,  8.,  9.],\n",
       "        [ 5.,  6.,  7.,  8.,  9.],\n",
       "        [ 0.,  0.,  0.,  0.,  0.]],\n",
       "\n",
       "       [[10., 11., 12., nan, nan],\n",
       "        [10., 11., 12., nan, nan],\n",
       "        [10., 11., 12., nan, nan],\n",
       "        [ 0.,  0.,  0.,  1.,  1.]]])"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "wl = 5\n",
    "stride = 5\n",
    "\n",
    "t = np.repeat(np.arange(13).reshape(-1,1), 3, axis=-1)\n",
    "print('input shape:', t.shape)\n",
    "X, y = SlidingWindow(wl, stride=stride, pad_remainder=True, get_y=[])(t)\n",
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input shape: (10,)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(#5) [(array([[0, 1, 2, 3, 4]]),),(array([[1, 2, 3, 4, 5]]),),(array([[2, 3, 4, 5, 6]]),),(array([[3, 4, 5, 6, 7]]),),(array([[4, 5, 6, 7, 8]]),)]"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "wl = 5\n",
    "t = np.arange(10)\n",
    "print('input shape:', t.shape)\n",
    "X, y = SlidingWindow(wl)(t)\n",
    "test_eq(X.shape[1:], (1, wl))\n",
    "itemify(X,)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input shape: (10,)\n",
      "[(array([[0, 1, 2, 3, 4]]), 5), (array([[1, 2, 3, 4, 5]]), 6), (array([[2, 3, 4, 5, 6]]), 7), (array([[3, 4, 5, 6, 7]]), 8), (array([[4, 5, 6, 7, 8]]), 9)]\n"
     ]
    }
   ],
   "source": [
    "wl = 5\n",
    "h = 1\n",
    "\n",
    "t = np.arange(10)\n",
    "print('input shape:', t.shape)\n",
    "X, y = SlidingWindow(wl, stride=1, horizon=h)(t)\n",
    "items = itemify(X, y)\n",
    "print(items)\n",
    "test_eq(items[0][0].shape, (1, wl))\n",
    "test_eq(items[0][1].shape, ())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input shape: (10,)\n",
      "[(array([[0, 1, 2, 3, 4]]), array([5, 6])), (array([[1, 2, 3, 4, 5]]), array([6, 7])), (array([[2, 3, 4, 5, 6]]), array([7, 8])), (array([[3, 4, 5, 6, 7]]), array([8, 9]))]\n"
     ]
    }
   ],
   "source": [
    "wl = 5\n",
    "h = 2 # 2 or more\n",
    "\n",
    "t = np.arange(10)\n",
    "print('input shape:', t.shape)\n",
    "X, y = SlidingWindow(wl, horizon=h)(t)\n",
    "items = itemify(X, y)\n",
    "print(items)\n",
    "test_eq(items[0][0].shape, (1, wl))\n",
    "test_eq(items[0][1].shape, (2, ))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input shape: (1, 10)\n",
      "[(array([[0, 1, 2, 3, 4]]), array([5, 6])), (array([[1, 2, 3, 4, 5]]), array([6, 7])), (array([[2, 3, 4, 5, 6]]), array([7, 8])), (array([[3, 4, 5, 6, 7]]), array([8, 9]))]\n"
     ]
    }
   ],
   "source": [
    "wl = 5\n",
    "h = 2 # 2 or more\n",
    "\n",
    "t = np.arange(10).reshape(1, -1)\n",
    "print('input shape:', t.shape)\n",
    "X, y = SlidingWindow(wl, stride=1, horizon=h, get_y=None, seq_first=False)(t)\n",
    "items = itemify(X, y)\n",
    "print(items)\n",
    "test_eq(items[0][0].shape, (1, wl))\n",
    "test_eq(items[0][1].shape, (2, ))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input shape: (1, 10)\n",
      "[(array([[0, 1, 2, 3, 4]]), array([5, 6])), (array([[1, 2, 3, 4, 5]]), array([6, 7])), (array([[2, 3, 4, 5, 6]]), array([7, 8])), (array([[3, 4, 5, 6, 7]]), array([8, 9]))]\n"
     ]
    }
   ],
   "source": [
    "wl = 5\n",
    "h = 2 # 2 or more\n",
    "\n",
    "t = np.arange(10).reshape(1, -1)\n",
    "print('input shape:', t.shape)\n",
    "X, y = SlidingWindow(wl, stride=1, horizon=h, seq_first=False)(t)\n",
    "items = itemify(X, y)\n",
    "print(items)\n",
    "test_eq(items[0][0].shape, (1, wl))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input shape: (1, 10)\n",
      "[(array([[0, 1, 2, 3, 4]]), 5), (array([[3, 4, 5, 6, 7]]), 8)]\n"
     ]
    }
   ],
   "source": [
    "wl = 5\n",
    "\n",
    "t = np.arange(10).reshape(1, -1)\n",
    "print('input shape:', t.shape)\n",
    "X, y = SlidingWindow(wl, stride=3, horizon=1, get_y=None, seq_first=False)(t)\n",
    "items = itemify(X, y)\n",
    "print(items)\n",
    "test_eq(items[0][0].shape, (1, wl))\n",
    "test_eq(items[0][1].shape, ())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input shape: (20,)\n",
      "[(array([[3, 4, 5, 6, 7]]), 8), (array([[ 8,  9, 10, 11, 12]]), 13), (array([[13, 14, 15, 16, 17]]), 18)]\n"
     ]
    }
   ],
   "source": [
    "wl = 5\n",
    "start = 3\n",
    "\n",
    "t = np.arange(20)\n",
    "print('input shape:', t.shape)\n",
    "X, y = SlidingWindow(wl, stride=None, horizon=1, start=start)(t)\n",
    "items = itemify(X, y)\n",
    "print(items)\n",
    "test_eq(items[0][0].shape, (1, wl))\n",
    "test_eq(items[0][1].shape, ())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input shape: (20,)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>var</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    var\n",
       "0     0\n",
       "1     1\n",
       "2     2\n",
       "3     3\n",
       "4     4\n",
       "5     5\n",
       "6     6\n",
       "7     7\n",
       "8     8\n",
       "9     9\n",
       "10   10\n",
       "11   11\n",
       "12   12\n",
       "13   13\n",
       "14   14\n",
       "15   15\n",
       "16   16\n",
       "17   17\n",
       "18   18\n",
       "19   19"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(array([[0, 1, 2, 3, 4]]), 5), (array([[5, 6, 7, 8, 9]]), 10), (array([[10, 11, 12, 13, 14]]), 15)]\n"
     ]
    }
   ],
   "source": [
    "wl = 5\n",
    "\n",
    "t = np.arange(20)\n",
    "print('input shape:', t.shape)\n",
    "df = pd.DataFrame(t, columns=['var'])\n",
    "display(df)\n",
    "X, y = SlidingWindow(wl, stride=None, horizon=1, get_y=None)(df)\n",
    "items = itemify(X, y)\n",
    "print(items)\n",
    "test_eq(items[0][0].shape, (1, wl))\n",
    "test_eq(items[0][1].shape, ())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input shape: (20,)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>var</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    var\n",
       "0     0\n",
       "1     1\n",
       "2     2\n",
       "3     3\n",
       "4     4\n",
       "5     5\n",
       "6     6\n",
       "7     7\n",
       "8     8\n",
       "9     9\n",
       "10   10\n",
       "11   11\n",
       "12   12\n",
       "13   13\n",
       "14   14\n",
       "15   15\n",
       "16   16\n",
       "17   17\n",
       "18   18\n",
       "19   19"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(array([[0, 1, 2, 3, 4]]), 5), (array([[1, 2, 3, 4, 5]]), 6), (array([[2, 3, 4, 5, 6]]), 7), (array([[3, 4, 5, 6, 7]]), 8), (array([[4, 5, 6, 7, 8]]), 9), (array([[5, 6, 7, 8, 9]]), 10), (array([[ 6,  7,  8,  9, 10]]), 11), (array([[ 7,  8,  9, 10, 11]]), 12), (array([[ 8,  9, 10, 11, 12]]), 13), (array([[ 9, 10, 11, 12, 13]]), 14), (array([[10, 11, 12, 13, 14]]), 15), (array([[11, 12, 13, 14, 15]]), 16), (array([[12, 13, 14, 15, 16]]), 17), (array([[13, 14, 15, 16, 17]]), 18), (array([[14, 15, 16, 17, 18]]), 19)]\n"
     ]
    }
   ],
   "source": [
    "wl = 5\n",
    "\n",
    "t = np.arange(20)\n",
    "print('input shape:', t.shape)\n",
    "df = pd.DataFrame(t, columns=['var'])\n",
    "display(df)\n",
    "X, y = SlidingWindow(wl, stride=1, horizon=1, get_y=None)(df)\n",
    "items = itemify(X, y)\n",
    "print(items)\n",
    "test_eq(items[0][0].shape, (1, wl))\n",
    "test_eq(items[0][1].shape, ())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input shape: (20,)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>13</th>\n",
       "      <th>14</th>\n",
       "      <th>15</th>\n",
       "      <th>16</th>\n",
       "      <th>17</th>\n",
       "      <th>18</th>\n",
       "      <th>19</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>var</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>9</td>\n",
       "      <td>10</td>\n",
       "      <td>11</td>\n",
       "      <td>12</td>\n",
       "      <td>13</td>\n",
       "      <td>14</td>\n",
       "      <td>15</td>\n",
       "      <td>16</td>\n",
       "      <td>17</td>\n",
       "      <td>18</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  \\\n",
       "var   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17   \n",
       "\n",
       "     18  19  \n",
       "var  18  19  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(array([[0, 1, 2, 3, 4]]), 5), (array([[5, 6, 7, 8, 9]]), 10), (array([[10, 11, 12, 13, 14]]), 15)]\n"
     ]
    }
   ],
   "source": [
    "wl = 5\n",
    "\n",
    "t = np.arange(20)\n",
    "print('input shape:', t.shape)\n",
    "df = pd.DataFrame(t, columns=['var']).T\n",
    "display(df)\n",
    "X, y = SlidingWindow(wl, stride=None, horizon=1, get_y=None, seq_first=False)(df)\n",
    "items = itemify(X, y)\n",
    "print(items)\n",
    "test_eq(items[0][0].shape, (1, wl))\n",
    "test_eq(items[0][1].shape, ())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input shape: torch.Size([10, 3])\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>var_0</th>\n",
       "      <th>var_1</th>\n",
       "      <th>var_2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>tensor(0)</td>\n",
       "      <td>tensor(0)</td>\n",
       "      <td>tensor(0)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>tensor(1)</td>\n",
       "      <td>tensor(10)</td>\n",
       "      <td>tensor(100)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>tensor(2)</td>\n",
       "      <td>tensor(20)</td>\n",
       "      <td>tensor(200)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>tensor(3)</td>\n",
       "      <td>tensor(30)</td>\n",
       "      <td>tensor(300)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>tensor(4)</td>\n",
       "      <td>tensor(40)</td>\n",
       "      <td>tensor(400)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>tensor(5)</td>\n",
       "      <td>tensor(50)</td>\n",
       "      <td>tensor(500)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>tensor(6)</td>\n",
       "      <td>tensor(60)</td>\n",
       "      <td>tensor(600)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>tensor(7)</td>\n",
       "      <td>tensor(70)</td>\n",
       "      <td>tensor(700)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>tensor(8)</td>\n",
       "      <td>tensor(80)</td>\n",
       "      <td>tensor(800)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>tensor(9)</td>\n",
       "      <td>tensor(90)</td>\n",
       "      <td>tensor(900)</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       var_0       var_1        var_2\n",
       "0  tensor(0)   tensor(0)    tensor(0)\n",
       "1  tensor(1)  tensor(10)  tensor(100)\n",
       "2  tensor(2)  tensor(20)  tensor(200)\n",
       "3  tensor(3)  tensor(30)  tensor(300)\n",
       "4  tensor(4)  tensor(40)  tensor(400)\n",
       "5  tensor(5)  tensor(50)  tensor(500)\n",
       "6  tensor(6)  tensor(60)  tensor(600)\n",
       "7  tensor(7)  tensor(70)  tensor(700)\n",
       "8  tensor(8)  tensor(80)  tensor(800)\n",
       "9  tensor(9)  tensor(90)  tensor(900)"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(array([[tensor(0), tensor(1), tensor(2), tensor(3), tensor(4)],\n",
      "       [tensor(0), tensor(10), tensor(20), tensor(30), tensor(40)],\n",
      "       [tensor(0), tensor(100), tensor(200), tensor(300), tensor(400)]],\n",
      "      dtype=object), array([tensor(5), tensor(50), tensor(500)], dtype=object)), (array([[tensor(1), tensor(2), tensor(3), tensor(4), tensor(5)],\n",
      "       [tensor(10), tensor(20), tensor(30), tensor(40), tensor(50)],\n",
      "       [tensor(100), tensor(200), tensor(300), tensor(400), tensor(500)]],\n",
      "      dtype=object), array([tensor(6), tensor(60), tensor(600)], dtype=object)), (array([[tensor(2), tensor(3), tensor(4), tensor(5), tensor(6)],\n",
      "       [tensor(20), tensor(30), tensor(40), tensor(50), tensor(60)],\n",
      "       [tensor(200), tensor(300), tensor(400), tensor(500), tensor(600)]],\n",
      "      dtype=object), array([tensor(7), tensor(70), tensor(700)], dtype=object)), (array([[tensor(3), tensor(4), tensor(5), tensor(6), tensor(7)],\n",
      "       [tensor(30), tensor(40), tensor(50), tensor(60), tensor(70)],\n",
      "       [tensor(300), tensor(400), tensor(500), tensor(600), tensor(700)]],\n",
      "      dtype=object), array([tensor(8), tensor(80), tensor(800)], dtype=object)), (array([[tensor(4), tensor(5), tensor(6), tensor(7), tensor(8)],\n",
      "       [tensor(40), tensor(50), tensor(60), tensor(70), tensor(80)],\n",
      "       [tensor(400), tensor(500), tensor(600), tensor(700), tensor(800)]],\n",
      "      dtype=object), array([tensor(9), tensor(90), tensor(900)], dtype=object))]\n"
     ]
    }
   ],
   "source": [
    "wl = 5\n",
    "n_vars = 3\n",
    "\n",
    "t = (torch.stack(n_vars * [torch.arange(10)]).T * tensor([1, 10, 100]))\n",
    "print('input shape:', t.shape)\n",
    "df = pd.DataFrame(t, columns=[f'var_{i}' for i in range(n_vars)])\n",
    "display(df)\n",
    "X, y = SlidingWindow(wl, horizon=1)(df)\n",
    "items = itemify(X, y)\n",
    "print(items)\n",
    "test_eq(items[0][0].shape, (n_vars, wl))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input shape: torch.Size([10, 3])\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>var_0</th>\n",
       "      <th>var_1</th>\n",
       "      <th>var_2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>tensor(0)</td>\n",
       "      <td>tensor(0)</td>\n",
       "      <td>tensor(0)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>tensor(1)</td>\n",
       "      <td>tensor(10)</td>\n",
       "      <td>tensor(100)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>tensor(2)</td>\n",
       "      <td>tensor(20)</td>\n",
       "      <td>tensor(200)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>tensor(3)</td>\n",
       "      <td>tensor(30)</td>\n",
       "      <td>tensor(300)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>tensor(4)</td>\n",
       "      <td>tensor(40)</td>\n",
       "      <td>tensor(400)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>tensor(5)</td>\n",
       "      <td>tensor(50)</td>\n",
       "      <td>tensor(500)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>tensor(6)</td>\n",
       "      <td>tensor(60)</td>\n",
       "      <td>tensor(600)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>tensor(7)</td>\n",
       "      <td>tensor(70)</td>\n",
       "      <td>tensor(700)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>tensor(8)</td>\n",
       "      <td>tensor(80)</td>\n",
       "      <td>tensor(800)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>tensor(9)</td>\n",
       "      <td>tensor(90)</td>\n",
       "      <td>tensor(900)</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       var_0       var_1        var_2\n",
       "0  tensor(0)   tensor(0)    tensor(0)\n",
       "1  tensor(1)  tensor(10)  tensor(100)\n",
       "2  tensor(2)  tensor(20)  tensor(200)\n",
       "3  tensor(3)  tensor(30)  tensor(300)\n",
       "4  tensor(4)  tensor(40)  tensor(400)\n",
       "5  tensor(5)  tensor(50)  tensor(500)\n",
       "6  tensor(6)  tensor(60)  tensor(600)\n",
       "7  tensor(7)  tensor(70)  tensor(700)\n",
       "8  tensor(8)  tensor(80)  tensor(800)\n",
       "9  tensor(9)  tensor(90)  tensor(900)"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(array([[tensor(0), tensor(1), tensor(2), tensor(3), tensor(4)],\n",
      "       [tensor(0), tensor(10), tensor(20), tensor(30), tensor(40)],\n",
      "       [tensor(0), tensor(100), tensor(200), tensor(300), tensor(400)]],\n",
      "      dtype=object), tensor(5)), (array([[tensor(1), tensor(2), tensor(3), tensor(4), tensor(5)],\n",
      "       [tensor(10), tensor(20), tensor(30), tensor(40), tensor(50)],\n",
      "       [tensor(100), tensor(200), tensor(300), tensor(400), tensor(500)]],\n",
      "      dtype=object), tensor(6)), (array([[tensor(2), tensor(3), tensor(4), tensor(5), tensor(6)],\n",
      "       [tensor(20), tensor(30), tensor(40), tensor(50), tensor(60)],\n",
      "       [tensor(200), tensor(300), tensor(400), tensor(500), tensor(600)]],\n",
      "      dtype=object), tensor(7)), (array([[tensor(3), tensor(4), tensor(5), tensor(6), tensor(7)],\n",
      "       [tensor(30), tensor(40), tensor(50), tensor(60), tensor(70)],\n",
      "       [tensor(300), tensor(400), tensor(500), tensor(600), tensor(700)]],\n",
      "      dtype=object), tensor(8)), (array([[tensor(4), tensor(5), tensor(6), tensor(7), tensor(8)],\n",
      "       [tensor(40), tensor(50), tensor(60), tensor(70), tensor(80)],\n",
      "       [tensor(400), tensor(500), tensor(600), tensor(700), tensor(800)]],\n",
      "      dtype=object), tensor(9))]\n"
     ]
    }
   ],
   "source": [
    "wl = 5\n",
    "n_vars = 3\n",
    "\n",
    "t = (torch.stack(n_vars * [torch.arange(10)]).T * tensor([1, 10, 100]))\n",
    "print('input shape:', t.shape)\n",
    "df = pd.DataFrame(t, columns=[f'var_{i}' for i in range(n_vars)])\n",
    "display(df)\n",
    "X, y = SlidingWindow(wl, horizon=1, get_y=\"var_0\")(df)\n",
    "items = itemify(X, y)\n",
    "print(items)\n",
    "test_eq(items[0][0].shape, (n_vars, wl))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input shape: torch.Size([10, 3])\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>var_0</th>\n",
       "      <th>var_1</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>tensor(0)</td>\n",
       "      <td>tensor(0)</td>\n",
       "      <td>tensor(0)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>tensor(1)</td>\n",
       "      <td>tensor(10)</td>\n",
       "      <td>tensor(100)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>tensor(2)</td>\n",
       "      <td>tensor(20)</td>\n",
       "      <td>tensor(200)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>tensor(3)</td>\n",
       "      <td>tensor(30)</td>\n",
       "      <td>tensor(300)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>tensor(4)</td>\n",
       "      <td>tensor(40)</td>\n",
       "      <td>tensor(400)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>tensor(5)</td>\n",
       "      <td>tensor(50)</td>\n",
       "      <td>tensor(500)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>tensor(6)</td>\n",
       "      <td>tensor(60)</td>\n",
       "      <td>tensor(600)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>tensor(7)</td>\n",
       "      <td>tensor(70)</td>\n",
       "      <td>tensor(700)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>tensor(8)</td>\n",
       "      <td>tensor(80)</td>\n",
       "      <td>tensor(800)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>tensor(9)</td>\n",
       "      <td>tensor(90)</td>\n",
       "      <td>tensor(900)</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       var_0       var_1       target\n",
       "0  tensor(0)   tensor(0)    tensor(0)\n",
       "1  tensor(1)  tensor(10)  tensor(100)\n",
       "2  tensor(2)  tensor(20)  tensor(200)\n",
       "3  tensor(3)  tensor(30)  tensor(300)\n",
       "4  tensor(4)  tensor(40)  tensor(400)\n",
       "5  tensor(5)  tensor(50)  tensor(500)\n",
       "6  tensor(6)  tensor(60)  tensor(600)\n",
       "7  tensor(7)  tensor(70)  tensor(700)\n",
       "8  tensor(8)  tensor(80)  tensor(800)\n",
       "9  tensor(9)  tensor(90)  tensor(900)"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(array([[tensor(0), tensor(1), tensor(2), tensor(3), tensor(4)],\n",
      "       [tensor(0), tensor(10), tensor(20), tensor(30), tensor(40)]],\n",
      "      dtype=object), tensor(500)), (array([[tensor(1), tensor(2), tensor(3), tensor(4), tensor(5)],\n",
      "       [tensor(10), tensor(20), tensor(30), tensor(40), tensor(50)]],\n",
      "      dtype=object), tensor(600)), (array([[tensor(2), tensor(3), tensor(4), tensor(5), tensor(6)],\n",
      "       [tensor(20), tensor(30), tensor(40), tensor(50), tensor(60)]],\n",
      "      dtype=object), tensor(700)), (array([[tensor(3), tensor(4), tensor(5), tensor(6), tensor(7)],\n",
      "       [tensor(30), tensor(40), tensor(50), tensor(60), tensor(70)]],\n",
      "      dtype=object), tensor(800)), (array([[tensor(4), tensor(5), tensor(6), tensor(7), tensor(8)],\n",
      "       [tensor(40), tensor(50), tensor(60), tensor(70), tensor(80)]],\n",
      "      dtype=object), tensor(900))]\n"
     ]
    }
   ],
   "source": [
    "wl = 5\n",
    "n_vars = 3\n",
    "\n",
    "t = (torch.stack(n_vars * [torch.arange(10)]).T * tensor([1, 10, 100]))\n",
    "print('input shape:', t.shape)\n",
    "columns=[f'var_{i}' for i in range(n_vars-1)]+['target']\n",
    "df = pd.DataFrame(t, columns=columns)\n",
    "display(df)\n",
    "X, y = SlidingWindow(wl, horizon=1, get_x=columns[:-1], get_y='target')(df)\n",
    "items = itemify(X, y)\n",
    "print(items)\n",
    "test_eq(items[0][0].shape, (n_vars-1, wl))\n",
    "test_eq(items[0][1].shape, ())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1000, 3)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(200, 2, 5) (200,)\n"
     ]
    }
   ],
   "source": [
    "n_vars = 3\n",
    "\n",
    "t = (np.random.rand(1000, n_vars) - .5).cumsum(0)\n",
    "print(t.shape)\n",
    "plt.plot(t)\n",
    "plt.show()\n",
    "X, y = SlidingWindow(5, stride=None, horizon=0, get_x=[0,1], get_y=2)(t)\n",
    "test_eq(X[0].shape, (n_vars-1, wl))\n",
    "test_eq(y[0].shape, ())\n",
    "print(X.shape, y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(100, 3)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>var_0</th>\n",
       "      <th>var_1</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.425384</td>\n",
       "      <td>0.389975</td>\n",
       "      <td>0.358791</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.405318</td>\n",
       "      <td>0.217295</td>\n",
       "      <td>0.763139</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.726061</td>\n",
       "      <td>0.010626</td>\n",
       "      <td>0.288258</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.642027</td>\n",
       "      <td>-0.207585</td>\n",
       "      <td>0.326436</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.517615</td>\n",
       "      <td>-0.571143</td>\n",
       "      <td>0.722700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>0.143566</td>\n",
       "      <td>0.816213</td>\n",
       "      <td>3.074438</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>0.130509</td>\n",
       "      <td>0.450261</td>\n",
       "      <td>2.875360</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>0.106960</td>\n",
       "      <td>0.829813</td>\n",
       "      <td>2.762571</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>0.298087</td>\n",
       "      <td>1.280414</td>\n",
       "      <td>2.541637</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>0.747045</td>\n",
       "      <td>1.379080</td>\n",
       "      <td>2.216011</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       var_0     var_1    target\n",
       "0   0.425384  0.389975  0.358791\n",
       "1   0.405318  0.217295  0.763139\n",
       "2   0.726061  0.010626  0.288258\n",
       "3   0.642027 -0.207585  0.326436\n",
       "4   0.517615 -0.571143  0.722700\n",
       "..       ...       ...       ...\n",
       "95  0.143566  0.816213  3.074438\n",
       "96  0.130509  0.450261  2.875360\n",
       "97  0.106960  0.829813  2.762571\n",
       "98  0.298087  1.280414  2.541637\n",
       "99  0.747045  1.379080  2.216011\n",
       "\n",
       "[100 rows x 3 columns]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(96, 2, 5) (96,)\n"
     ]
    }
   ],
   "source": [
    "wl = 5\n",
    "n_vars = 3\n",
    "\n",
    "t = (np.random.rand(100, n_vars) - .5).cumsum(0)\n",
    "print(t.shape)\n",
    "columns=[f'var_{i}' for i in range(n_vars-1)]+['target']\n",
    "df = pd.DataFrame(t, columns=columns)\n",
    "display(df)\n",
    "X, y = SlidingWindow(5, horizon=0, get_x=columns[:-1], get_y='target')(df)\n",
    "test_eq(X[0].shape, (n_vars-1, wl))\n",
    "test_eq(y[0].shape, ())\n",
    "print(X.shape, y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(100, 5)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>var_0</th>\n",
       "      <th>var_1</th>\n",
       "      <th>var_2</th>\n",
       "      <th>var_3</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.113306</td>\n",
       "      <td>0.406153</td>\n",
       "      <td>0.450763</td>\n",
       "      <td>-0.163750</td>\n",
       "      <td>0.134610</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.114101</td>\n",
       "      <td>0.502851</td>\n",
       "      <td>0.020611</td>\n",
       "      <td>0.094270</td>\n",
       "      <td>0.217379</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.159095</td>\n",
       "      <td>0.812339</td>\n",
       "      <td>0.115610</td>\n",
       "      <td>0.506805</td>\n",
       "      <td>-0.059258</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.111266</td>\n",
       "      <td>0.926737</td>\n",
       "      <td>-0.036331</td>\n",
       "      <td>0.470563</td>\n",
       "      <td>0.182893</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.136658</td>\n",
       "      <td>0.449927</td>\n",
       "      <td>-0.488201</td>\n",
       "      <td>0.164951</td>\n",
       "      <td>-0.155879</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>-0.724871</td>\n",
       "      <td>4.663383</td>\n",
       "      <td>8.507840</td>\n",
       "      <td>0.046618</td>\n",
       "      <td>0.942307</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>-0.810676</td>\n",
       "      <td>4.758601</td>\n",
       "      <td>8.783791</td>\n",
       "      <td>-0.199609</td>\n",
       "      <td>1.144218</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>-1.251288</td>\n",
       "      <td>4.769096</td>\n",
       "      <td>9.184236</td>\n",
       "      <td>-0.549223</td>\n",
       "      <td>1.637890</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>-1.131325</td>\n",
       "      <td>4.836805</td>\n",
       "      <td>9.016433</td>\n",
       "      <td>-0.297081</td>\n",
       "      <td>2.054334</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>-0.999644</td>\n",
       "      <td>4.378000</td>\n",
       "      <td>8.748841</td>\n",
       "      <td>-0.183009</td>\n",
       "      <td>1.609790</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       var_0     var_1     var_2     var_3    target\n",
       "0   0.113306  0.406153  0.450763 -0.163750  0.134610\n",
       "1  -0.114101  0.502851  0.020611  0.094270  0.217379\n",
       "2  -0.159095  0.812339  0.115610  0.506805 -0.059258\n",
       "3   0.111266  0.926737 -0.036331  0.470563  0.182893\n",
       "4   0.136658  0.449927 -0.488201  0.164951 -0.155879\n",
       "..       ...       ...       ...       ...       ...\n",
       "95 -0.724871  4.663383  8.507840  0.046618  0.942307\n",
       "96 -0.810676  4.758601  8.783791 -0.199609  1.144218\n",
       "97 -1.251288  4.769096  9.184236 -0.549223  1.637890\n",
       "98 -1.131325  4.836805  9.016433 -0.297081  2.054334\n",
       "99 -0.999644  4.378000  8.748841 -0.183009  1.609790\n",
       "\n",
       "[100 rows x 5 columns]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(96, 4, 5) (96,)\n"
     ]
    }
   ],
   "source": [
    "seq_len = 100\n",
    "n_vars = 5\n",
    "t = (np.random.rand(seq_len, n_vars) - .5).cumsum(0)\n",
    "print(t.shape)\n",
    "columns=[f'var_{i}' for i in range(n_vars-1)]+['target']\n",
    "df = pd.DataFrame(t, columns=columns)\n",
    "display(df)\n",
    "X, y = SlidingWindow(5, stride=1, horizon=0, get_x=columns[:-1], get_y='target', seq_first=True)(df)\n",
    "test_eq(X[0].shape, (n_vars-1, wl))\n",
    "test_eq(y[0].shape, ())\n",
    "print(X.shape, y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(100, 5)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>...</th>\n",
       "      <th>90</th>\n",
       "      <th>91</th>\n",
       "      <th>92</th>\n",
       "      <th>93</th>\n",
       "      <th>94</th>\n",
       "      <th>95</th>\n",
       "      <th>96</th>\n",
       "      <th>97</th>\n",
       "      <th>98</th>\n",
       "      <th>99</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>var_0</th>\n",
       "      <td>0.481800</td>\n",
       "      <td>0.767668</td>\n",
       "      <td>1.266852</td>\n",
       "      <td>1.167165</td>\n",
       "      <td>1.325884</td>\n",
       "      <td>1.353266</td>\n",
       "      <td>0.950254</td>\n",
       "      <td>1.121376</td>\n",
       "      <td>0.764226</td>\n",
       "      <td>1.083609</td>\n",
       "      <td>...</td>\n",
       "      <td>1.889931</td>\n",
       "      <td>1.915581</td>\n",
       "      <td>2.035298</td>\n",
       "      <td>1.935537</td>\n",
       "      <td>1.514511</td>\n",
       "      <td>1.955949</td>\n",
       "      <td>1.751927</td>\n",
       "      <td>2.176073</td>\n",
       "      <td>2.086139</td>\n",
       "      <td>1.962423</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>var_1</th>\n",
       "      <td>-0.003012</td>\n",
       "      <td>0.438552</td>\n",
       "      <td>0.033087</td>\n",
       "      <td>-0.216950</td>\n",
       "      <td>0.206385</td>\n",
       "      <td>-0.160877</td>\n",
       "      <td>-0.461829</td>\n",
       "      <td>-0.624911</td>\n",
       "      <td>-0.715439</td>\n",
       "      <td>-0.777954</td>\n",
       "      <td>...</td>\n",
       "      <td>-1.261866</td>\n",
       "      <td>-0.867804</td>\n",
       "      <td>-0.794762</td>\n",
       "      <td>-1.260260</td>\n",
       "      <td>-1.623188</td>\n",
       "      <td>-1.612379</td>\n",
       "      <td>-1.408408</td>\n",
       "      <td>-1.636654</td>\n",
       "      <td>-1.572340</td>\n",
       "      <td>-1.126314</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>var_2</th>\n",
       "      <td>0.310297</td>\n",
       "      <td>0.707496</td>\n",
       "      <td>0.717641</td>\n",
       "      <td>0.329570</td>\n",
       "      <td>-0.110760</td>\n",
       "      <td>-0.503635</td>\n",
       "      <td>-0.013135</td>\n",
       "      <td>-0.125323</td>\n",
       "      <td>0.341515</td>\n",
       "      <td>0.697972</td>\n",
       "      <td>...</td>\n",
       "      <td>-2.083062</td>\n",
       "      <td>-2.176805</td>\n",
       "      <td>-1.860679</td>\n",
       "      <td>-2.009890</td>\n",
       "      <td>-1.982530</td>\n",
       "      <td>-2.160977</td>\n",
       "      <td>-2.409006</td>\n",
       "      <td>-2.454099</td>\n",
       "      <td>-2.499715</td>\n",
       "      <td>-2.454046</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>var_3</th>\n",
       "      <td>0.031364</td>\n",
       "      <td>-0.180028</td>\n",
       "      <td>-0.054971</td>\n",
       "      <td>-0.197904</td>\n",
       "      <td>-0.446342</td>\n",
       "      <td>-0.275233</td>\n",
       "      <td>-0.646426</td>\n",
       "      <td>-0.844938</td>\n",
       "      <td>-0.670323</td>\n",
       "      <td>-0.187199</td>\n",
       "      <td>...</td>\n",
       "      <td>1.740708</td>\n",
       "      <td>1.381085</td>\n",
       "      <td>1.139631</td>\n",
       "      <td>1.602170</td>\n",
       "      <td>1.754529</td>\n",
       "      <td>1.352056</td>\n",
       "      <td>1.828581</td>\n",
       "      <td>2.255023</td>\n",
       "      <td>2.506743</td>\n",
       "      <td>2.027922</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>target</th>\n",
       "      <td>0.051760</td>\n",
       "      <td>0.220619</td>\n",
       "      <td>0.492616</td>\n",
       "      <td>0.972704</td>\n",
       "      <td>0.503141</td>\n",
       "      <td>0.860178</td>\n",
       "      <td>0.809317</td>\n",
       "      <td>0.469393</td>\n",
       "      <td>0.340585</td>\n",
       "      <td>0.601179</td>\n",
       "      <td>...</td>\n",
       "      <td>2.012693</td>\n",
       "      <td>2.376822</td>\n",
       "      <td>2.810545</td>\n",
       "      <td>2.547291</td>\n",
       "      <td>2.558243</td>\n",
       "      <td>2.825866</td>\n",
       "      <td>2.421291</td>\n",
       "      <td>2.830484</td>\n",
       "      <td>2.454155</td>\n",
       "      <td>2.788130</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 100 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "              0         1         2         3         4         5         6   \\\n",
       "var_0   0.481800  0.767668  1.266852  1.167165  1.325884  1.353266  0.950254   \n",
       "var_1  -0.003012  0.438552  0.033087 -0.216950  0.206385 -0.160877 -0.461829   \n",
       "var_2   0.310297  0.707496  0.717641  0.329570 -0.110760 -0.503635 -0.013135   \n",
       "var_3   0.031364 -0.180028 -0.054971 -0.197904 -0.446342 -0.275233 -0.646426   \n",
       "target  0.051760  0.220619  0.492616  0.972704  0.503141  0.860178  0.809317   \n",
       "\n",
       "              7         8         9   ...        90        91        92  \\\n",
       "var_0   1.121376  0.764226  1.083609  ...  1.889931  1.915581  2.035298   \n",
       "var_1  -0.624911 -0.715439 -0.777954  ... -1.261866 -0.867804 -0.794762   \n",
       "var_2  -0.125323  0.341515  0.697972  ... -2.083062 -2.176805 -1.860679   \n",
       "var_3  -0.844938 -0.670323 -0.187199  ...  1.740708  1.381085  1.139631   \n",
       "target  0.469393  0.340585  0.601179  ...  2.012693  2.376822  2.810545   \n",
       "\n",
       "              93        94        95        96        97        98        99  \n",
       "var_0   1.935537  1.514511  1.955949  1.751927  2.176073  2.086139  1.962423  \n",
       "var_1  -1.260260 -1.623188 -1.612379 -1.408408 -1.636654 -1.572340 -1.126314  \n",
       "var_2  -2.009890 -1.982530 -2.160977 -2.409006 -2.454099 -2.499715 -2.454046  \n",
       "var_3   1.602170  1.754529  1.352056  1.828581  2.255023  2.506743  2.027922  \n",
       "target  2.547291  2.558243  2.825866  2.421291  2.830484  2.454155  2.788130  \n",
       "\n",
       "[5 rows x 100 columns]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(96, 4, 5) (96,)\n"
     ]
    }
   ],
   "source": [
    "seq_len = 100\n",
    "n_vars = 5\n",
    "\n",
    "t = (np.random.rand(seq_len, n_vars) - .5).cumsum(0)\n",
    "print(t.shape)\n",
    "columns=[f'var_{i}' for i in range(n_vars-1)] + ['target']\n",
    "df = pd.DataFrame(t, columns=columns).T\n",
    "display(df)\n",
    "X, y = SlidingWindow(5, stride=1, horizon=0, get_x=columns[:-1], get_y='target', seq_first=False)(df)\n",
    "test_eq(X[0].shape, (n_vars-1, wl))\n",
    "test_eq(y[0].shape, ())\n",
    "print(X.shape, y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(100, 5)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>...</th>\n",
       "      <th>90</th>\n",
       "      <th>91</th>\n",
       "      <th>92</th>\n",
       "      <th>93</th>\n",
       "      <th>94</th>\n",
       "      <th>95</th>\n",
       "      <th>96</th>\n",
       "      <th>97</th>\n",
       "      <th>98</th>\n",
       "      <th>99</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>var_0</th>\n",
       "      <td>0.445158</td>\n",
       "      <td>0.676725</td>\n",
       "      <td>1.008301</td>\n",
       "      <td>1.488958</td>\n",
       "      <td>1.572959</td>\n",
       "      <td>1.232868</td>\n",
       "      <td>1.606676</td>\n",
       "      <td>1.780644</td>\n",
       "      <td>1.866027</td>\n",
       "      <td>1.861405</td>\n",
       "      <td>...</td>\n",
       "      <td>0.547313</td>\n",
       "      <td>0.942989</td>\n",
       "      <td>0.550900</td>\n",
       "      <td>0.947722</td>\n",
       "      <td>1.387354</td>\n",
       "      <td>1.214875</td>\n",
       "      <td>1.040467</td>\n",
       "      <td>1.153282</td>\n",
       "      <td>1.387640</td>\n",
       "      <td>1.118774</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>var_1</th>\n",
       "      <td>0.142383</td>\n",
       "      <td>0.152040</td>\n",
       "      <td>-0.201064</td>\n",
       "      <td>-0.642870</td>\n",
       "      <td>-0.154133</td>\n",
       "      <td>-0.428361</td>\n",
       "      <td>-0.811126</td>\n",
       "      <td>-0.757622</td>\n",
       "      <td>-0.367572</td>\n",
       "      <td>-0.789568</td>\n",
       "      <td>...</td>\n",
       "      <td>-2.023777</td>\n",
       "      <td>-1.995496</td>\n",
       "      <td>-2.235367</td>\n",
       "      <td>-2.039860</td>\n",
       "      <td>-1.994653</td>\n",
       "      <td>-2.324249</td>\n",
       "      <td>-2.254664</td>\n",
       "      <td>-2.373856</td>\n",
       "      <td>-2.735245</td>\n",
       "      <td>-2.241558</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>var_2</th>\n",
       "      <td>-0.262617</td>\n",
       "      <td>0.178644</td>\n",
       "      <td>0.288476</td>\n",
       "      <td>0.736092</td>\n",
       "      <td>0.714647</td>\n",
       "      <td>0.656701</td>\n",
       "      <td>0.942396</td>\n",
       "      <td>1.187296</td>\n",
       "      <td>1.088446</td>\n",
       "      <td>0.736049</td>\n",
       "      <td>...</td>\n",
       "      <td>-2.102508</td>\n",
       "      <td>-1.946543</td>\n",
       "      <td>-1.561333</td>\n",
       "      <td>-1.543616</td>\n",
       "      <td>-1.740010</td>\n",
       "      <td>-1.875933</td>\n",
       "      <td>-2.116537</td>\n",
       "      <td>-1.997565</td>\n",
       "      <td>-2.491888</td>\n",
       "      <td>-2.084733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>var_3</th>\n",
       "      <td>0.124509</td>\n",
       "      <td>-0.279794</td>\n",
       "      <td>-0.276689</td>\n",
       "      <td>0.037345</td>\n",
       "      <td>-0.322787</td>\n",
       "      <td>-0.745140</td>\n",
       "      <td>-1.077558</td>\n",
       "      <td>-0.889892</td>\n",
       "      <td>-0.631147</td>\n",
       "      <td>-1.066690</td>\n",
       "      <td>...</td>\n",
       "      <td>3.594737</td>\n",
       "      <td>3.510633</td>\n",
       "      <td>3.097920</td>\n",
       "      <td>3.201749</td>\n",
       "      <td>2.937030</td>\n",
       "      <td>3.416820</td>\n",
       "      <td>3.870089</td>\n",
       "      <td>3.857518</td>\n",
       "      <td>3.911162</td>\n",
       "      <td>3.537754</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>target</th>\n",
       "      <td>-0.193091</td>\n",
       "      <td>0.049086</td>\n",
       "      <td>-0.327358</td>\n",
       "      <td>0.019210</td>\n",
       "      <td>-0.219993</td>\n",
       "      <td>0.195364</td>\n",
       "      <td>-0.132089</td>\n",
       "      <td>0.204538</td>\n",
       "      <td>0.525334</td>\n",
       "      <td>0.667191</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.498714</td>\n",
       "      <td>-0.228211</td>\n",
       "      <td>-0.429020</td>\n",
       "      <td>-0.045872</td>\n",
       "      <td>-0.449371</td>\n",
       "      <td>-0.316423</td>\n",
       "      <td>-0.366599</td>\n",
       "      <td>-0.517504</td>\n",
       "      <td>-0.983991</td>\n",
       "      <td>-1.257910</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 100 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "              0         1         2         3         4         5         6   \\\n",
       "var_0   0.445158  0.676725  1.008301  1.488958  1.572959  1.232868  1.606676   \n",
       "var_1   0.142383  0.152040 -0.201064 -0.642870 -0.154133 -0.428361 -0.811126   \n",
       "var_2  -0.262617  0.178644  0.288476  0.736092  0.714647  0.656701  0.942396   \n",
       "var_3   0.124509 -0.279794 -0.276689  0.037345 -0.322787 -0.745140 -1.077558   \n",
       "target -0.193091  0.049086 -0.327358  0.019210 -0.219993  0.195364 -0.132089   \n",
       "\n",
       "              7         8         9   ...        90        91        92  \\\n",
       "var_0   1.780644  1.866027  1.861405  ...  0.547313  0.942989  0.550900   \n",
       "var_1  -0.757622 -0.367572 -0.789568  ... -2.023777 -1.995496 -2.235367   \n",
       "var_2   1.187296  1.088446  0.736049  ... -2.102508 -1.946543 -1.561333   \n",
       "var_3  -0.889892 -0.631147 -1.066690  ...  3.594737  3.510633  3.097920   \n",
       "target  0.204538  0.525334  0.667191  ... -0.498714 -0.228211 -0.429020   \n",
       "\n",
       "              93        94        95        96        97        98        99  \n",
       "var_0   0.947722  1.387354  1.214875  1.040467  1.153282  1.387640  1.118774  \n",
       "var_1  -2.039860 -1.994653 -2.324249 -2.254664 -2.373856 -2.735245 -2.241558  \n",
       "var_2  -1.543616 -1.740010 -1.875933 -2.116537 -1.997565 -2.491888 -2.084733  \n",
       "var_3   3.201749  2.937030  3.416820  3.870089  3.857518  3.911162  3.537754  \n",
       "target -0.045872 -0.449371 -0.316423 -0.366599 -0.517504 -0.983991 -1.257910  \n",
       "\n",
       "[5 rows x 100 columns]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(20, 4, 5) (20,)\n"
     ]
    }
   ],
   "source": [
    "seq_len = 100\n",
    "n_vars = 5\n",
    "t = (np.random.rand(seq_len, n_vars) - .5).cumsum(0)\n",
    "print(t.shape)\n",
    "columns=[f'var_{i}' for i in range(n_vars-1)] + ['target']\n",
    "df = pd.DataFrame(t, columns=columns).T\n",
    "display(df)\n",
    "X, y = SlidingWindow(5, stride=None, horizon=0, get_x=columns[:-1], get_y='target', seq_first=False)(df)\n",
    "test_eq(X[0].shape, (n_vars-1, wl))\n",
    "test_eq(y[0].shape, ())\n",
    "print(X.shape, y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(100, 5)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>var_0</th>\n",
       "      <th>var_1</th>\n",
       "      <th>var_2</th>\n",
       "      <th>var_3</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.476062</td>\n",
       "      <td>-0.441021</td>\n",
       "      <td>-0.152402</td>\n",
       "      <td>0.492305</td>\n",
       "      <td>0.324888</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.963942</td>\n",
       "      <td>-0.681256</td>\n",
       "      <td>-0.400798</td>\n",
       "      <td>0.714470</td>\n",
       "      <td>0.069261</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.936488</td>\n",
       "      <td>-0.298446</td>\n",
       "      <td>-0.552363</td>\n",
       "      <td>0.866561</td>\n",
       "      <td>-0.013964</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.687954</td>\n",
       "      <td>-0.197495</td>\n",
       "      <td>-0.168550</td>\n",
       "      <td>0.746651</td>\n",
       "      <td>0.141208</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.217864</td>\n",
       "      <td>-0.357602</td>\n",
       "      <td>0.136323</td>\n",
       "      <td>0.675570</td>\n",
       "      <td>0.115994</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>-2.085664</td>\n",
       "      <td>-0.675079</td>\n",
       "      <td>0.149284</td>\n",
       "      <td>-2.369042</td>\n",
       "      <td>2.378206</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>-2.578443</td>\n",
       "      <td>-0.454039</td>\n",
       "      <td>-0.285605</td>\n",
       "      <td>-2.262007</td>\n",
       "      <td>2.203203</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>-2.948181</td>\n",
       "      <td>-0.754311</td>\n",
       "      <td>0.190622</td>\n",
       "      <td>-2.087817</td>\n",
       "      <td>2.120880</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>-3.420887</td>\n",
       "      <td>-1.191640</td>\n",
       "      <td>0.435389</td>\n",
       "      <td>-2.227205</td>\n",
       "      <td>2.287877</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>-3.134166</td>\n",
       "      <td>-1.024706</td>\n",
       "      <td>0.242647</td>\n",
       "      <td>-1.823440</td>\n",
       "      <td>2.229724</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       var_0     var_1     var_2     var_3    target\n",
       "0  -0.476062 -0.441021 -0.152402  0.492305  0.324888\n",
       "1  -0.963942 -0.681256 -0.400798  0.714470  0.069261\n",
       "2  -0.936488 -0.298446 -0.552363  0.866561 -0.013964\n",
       "3  -0.687954 -0.197495 -0.168550  0.746651  0.141208\n",
       "4  -0.217864 -0.357602  0.136323  0.675570  0.115994\n",
       "..       ...       ...       ...       ...       ...\n",
       "95 -2.085664 -0.675079  0.149284 -2.369042  2.378206\n",
       "96 -2.578443 -0.454039 -0.285605 -2.262007  2.203203\n",
       "97 -2.948181 -0.754311  0.190622 -2.087817  2.120880\n",
       "98 -3.420887 -1.191640  0.435389 -2.227205  2.287877\n",
       "99 -3.134166 -1.024706  0.242647 -1.823440  2.229724\n",
       "\n",
       "[100 rows x 5 columns]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "((96, 4, 5),\n",
       " (96,),\n",
       " ((#77) [0,1,2,3,4,5,6,7,8,9...], (#19) [77,78,79,80,81,82,83,84,85,86...]))"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "seq_len = 100\n",
    "n_vars = 5\n",
    "t = (np.random.rand(seq_len, n_vars) - .5).cumsum(0)\n",
    "print(t.shape)\n",
    "columns=[f'var_{i}' for i in range(n_vars-1)]+['target']\n",
    "df = pd.DataFrame(t, columns=columns)\n",
    "display(df)\n",
    "X, y = SlidingWindow(5, stride=1, horizon=0, get_x=columns[:-1], get_y='target', seq_first=True)(df)\n",
    "splits = TrainValidTestSplitter(valid_size=.2, shuffle=False)(y)\n",
    "X.shape, y.shape, splits"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>col1</th>\n",
       "      <th>col2</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.1</td>\n",
       "      <td>0.1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.2</td>\n",
       "      <td>0.2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.3</td>\n",
       "      <td>0.3</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.4</td>\n",
       "      <td>0.4</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.6</td>\n",
       "      <td>0.6</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.7</td>\n",
       "      <td>0.7</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.8</td>\n",
       "      <td>0.8</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.9</td>\n",
       "      <td>0.9</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    col1  col2  target\n",
       "0    0.0   0.0       0\n",
       "1    0.1   0.1       1\n",
       "2    0.2   0.2       2\n",
       "3    0.3   0.3       3\n",
       "4    0.4   0.4       4\n",
       "5    0.5   0.5       5\n",
       "6    0.6   0.6       6\n",
       "7    0.7   0.7       7\n",
       "8    0.8   0.8       8\n",
       "9    0.9   0.9       9\n",
       "10   1.0   1.0      10"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = np.concatenate([np.linspace(0, 1, 11).reshape(-1,1).repeat(2, 1), np.arange(11).reshape(-1,1)], -1)\n",
    "df_test = pd.DataFrame(data, columns=['col1', 'col2', 'target'])\n",
    "df_test['target'] = df_test['target'].astype(int)\n",
    "df_test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def _y_func(o): return o[:, 0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "for wl in np.arange(1, 20):\n",
    "    x, y = SlidingWindow(wl, None, pad_remainder=True, get_x=['col1', 'col2'], get_y=['target'], horizon=-wl, y_func=_y_func)(df_test)\n",
    "    test_eq(x.shape[0], math.ceil((len(df_test))/wl))\n",
    "    test_eq(x.shape[0], y.shape[0])\n",
    "    test_eq(x.shape[1], 3)\n",
    "    test_eq(x.shape[2], wl)\n",
    "    test_close(x[:, 0, 0]*10, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "for wl in np.arange(1, 20):\n",
    "    x, y = SlidingWindow(wl, None, pad_remainder=True, get_x=['col1', 'col2'], get_y=['target'], horizon=-wl, y_func=None)(df_test)\n",
    "    test_eq(x.shape[0], math.ceil((len(df_test))/ wl))\n",
    "    test_eq(x.shape[0], y.shape[0])\n",
    "    test_eq(x.shape[1], 3)\n",
    "    test_eq(x.shape[2], wl)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "for wl in np.arange(1, len(df_test)+1):\n",
    "    x, y = SlidingWindow(wl, None, pad_remainder=False, get_x=['col1', 'col2'], get_y=['target'], horizon=-wl, y_func=None)(df_test)\n",
    "    test_eq(x.shape[0], len(df_test) // wl)\n",
    "    test_eq(x.shape[0], y.shape[0])\n",
    "    test_eq(x.shape[1], 2)\n",
    "    test_eq(x.shape[2], wl)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "for wl in np.arange(1, 20):\n",
    "    x, _ = SlidingWindow(wl, None, pad_remainder=True, get_x=['col1', 'col2'], get_y=[])(df_test)\n",
    "    test_eq(x.shape[0], math.ceil((len(df_test))/wl))\n",
    "    test_eq(x.shape[1], 3)\n",
    "    test_eq(x.shape[2], wl)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "for wl in np.arange(2, len(df_test)):\n",
    "    x, _ = SlidingWindow(wl, wl, pad_remainder=False, get_x=['col1', 'col2'], get_y=[])(df_test)\n",
    "    test_eq(x.shape[0], len(df_test) // wl)\n",
    "    test_eq(x.shape[1], 2)\n",
    "    test_eq(x.shape[2], wl)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#export\n",
    "def SlidingWindowPanel(window_len:int, unique_id_cols:list, stride:Union[None, int]=1, start:int=0,\n",
    "                       pad_remainder:bool=False, padding_value:float=np.nan, add_padding_feature:bool=True,\n",
    "                       get_x:Union[None, int, list]=None,  get_y:Union[None, int, list]=None, y_func:Optional[callable]=None, copy:bool=False,\n",
    "                       horizon:Union[int, list]=1, seq_first:bool=True, sort_by:Optional[list]=None, ascending:bool=True,\n",
    "                       check_leakage:bool=True, return_key:bool=False, verbose:bool=True):\n",
    "\n",
    "    \"\"\"\n",
    "    Applies a sliding window to a pd.DataFrame.\n",
    "\n",
    "    Args:\n",
    "        window_len          = length of lookback window\n",
    "        unique_id_cols      = pd.DataFrame columns that will be used to identify a time series for each entity.\n",
    "        stride              = n datapoints the window is moved ahead along the sequence. Default: 1. If None, stride=window_len (no overlap)\n",
    "        start               = determines the step where the first window is applied: 0 (default), a given step (int), or random within the 1st stride (None).\n",
    "        pad_remainder       = allows to pad remainder subsequences when the sliding window is applied and get_y == [] (unlabeled data).\n",
    "        padding_value       = value (float) that will be used for padding. Default: np.nan\n",
    "        add_padding_feature = add an additional feature indicating whether each timestep is padded (1) or not (0).\n",
    "        horizon             = number of future datapoints to predict:\n",
    "                            * 0 for last step in each sub-window.\n",
    "                            * n > 0 for a range of n future steps (1 to n).\n",
    "                            * n < 0 for a range of n past steps (-n + 1 to 0).\n",
    "                            * list : for those exact timesteps.\n",
    "        get_x               = indices of columns that contain the independent variable (xs). If None, all data will be used as x.\n",
    "        get_y               = indices of columns that contain the target (ys). If None, all data will be used as y. [] means no y data is created (unlabeled data).\n",
    "        y_func              = function to calculate the ys based on the get_y col/s and each y sub-window. y_func must be a function applied to axis=1!\n",
    "        copy                = copy the original object to avoid changes in it.\n",
    "        seq_first           = True if input shape (seq_len, n_vars), False if input shape (n_vars, seq_len)\n",
    "        sort_by             = column/s used for sorting the array in ascending order\n",
    "        ascending           = used in sorting\n",
    "        check_leakage       = checks if there's leakage in the output between X and y\n",
    "        return_key          = when True, the key corresponsing to unique_id_cols for each sample is returned\n",
    "        verbose             = controls verbosity. True or 1 displays progress bar. 2 or more show records that cannot be created due to its length.\n",
    "\n",
    "\n",
    "    Input:\n",
    "        You can use np.ndarray, pd.DataFrame or torch.Tensor as input\n",
    "        shape: (seq_len, ) or (seq_len, n_vars) if seq_first=True else (n_vars, seq_len)\n",
    "    \"\"\"\n",
    "\n",
    "    if not is_listy(unique_id_cols): unique_id_cols = [unique_id_cols]\n",
    "    if sort_by is not None and not  is_listy(sort_by): sort_by = [sort_by]\n",
    "    sort_by = unique_id_cols + (sort_by if sort_by is not None else [])\n",
    "\n",
    "    def _SlidingWindowPanel(o):\n",
    "\n",
    "        if copy: \n",
    "            o = o.copy()\n",
    "        o.sort_values(by=sort_by, axis=0, ascending=ascending, inplace=True, ignore_index=True)\n",
    "        unique_id_values = o[unique_id_cols].drop_duplicates().values\n",
    "        _x = []\n",
    "        _y = []\n",
    "        _key = []\n",
    "        for v in progress_bar(unique_id_values, display=verbose, leave=False):\n",
    "            x_v, y_v = SlidingWindow(window_len, stride=stride, start=start, pad_remainder=pad_remainder, padding_value=padding_value,\n",
    "                                     add_padding_feature=add_padding_feature, get_x=get_x, get_y=get_y, y_func=y_func,\n",
    "                                     horizon=horizon, seq_first=seq_first,\n",
    "                                     check_leakage=check_leakage)(o[(o[unique_id_cols].values == v).sum(axis=1) == len(v)])\n",
    "            if x_v is not None and len(x_v) > 0:\n",
    "                _x.append(x_v)\n",
    "                if return_key: _key.append([v.tolist()] * len(x_v))\n",
    "                if y_v is not None and len(y_v) > 0: _y.append(y_v)\n",
    "            elif verbose>=2:\n",
    "                print(f'cannot use {unique_id_cols} = {v} due to not having enough records')\n",
    "\n",
    "        X = np.concatenate(_x)\n",
    "        if _y != []:\n",
    "            y = np.concatenate(_y)\n",
    "            for d in np.arange(1, y.ndim)[::-1]:\n",
    "                if y.shape[d] == 1: y = np.squeeze(y, axis=d)\n",
    "        else: y = None\n",
    "        if return_key:\n",
    "            key = np.concatenate(_key)\n",
    "            if key.ndim == 2 and key.shape[-1] == 1: key = np.squeeze(key, -1)\n",
    "            if return_key: return X, y, key\n",
    "        else: return X, y\n",
    "\n",
    "    return _SlidingWindowPanel\n",
    "\n",
    "SlidingWindowPanelSplitter = SlidingWindowPanel"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>var_0</th>\n",
       "      <th>var_1</th>\n",
       "      <th>var_2</th>\n",
       "      <th>var_3</th>\n",
       "      <th>var_4</th>\n",
       "      <th>var_5</th>\n",
       "      <th>var_6</th>\n",
       "      <th>var_7</th>\n",
       "      <th>var_8</th>\n",
       "      <th>var_9</th>\n",
       "      <th>time</th>\n",
       "      <th>device</th>\n",
       "      <th>target</th>\n",
       "      <th>region</th>\n",
       "      <th>index</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>tensor(1287)</td>\n",
       "      <td>tensor(12870)</td>\n",
       "      <td>tensor(128700)</td>\n",
       "      <td>tensor(1287000)</td>\n",
       "      <td>tensor(12870000)</td>\n",
       "      <td>tensor(128700000)</td>\n",
       "      <td>tensor(1287000000)</td>\n",
       "      <td>tensor(12870000000)</td>\n",
       "      <td>tensor(128700000000)</td>\n",
       "      <td>tensor(1287000000000)</td>\n",
       "      <td>1287</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>A</td>\n",
       "      <td>1287</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>tensor(2247)</td>\n",
       "      <td>tensor(22470)</td>\n",
       "      <td>tensor(224700)</td>\n",
       "      <td>tensor(2247000)</td>\n",
       "      <td>tensor(22470000)</td>\n",
       "      <td>tensor(224700000)</td>\n",
       "      <td>tensor(2247000000)</td>\n",
       "      <td>tensor(22470000000)</td>\n",
       "      <td>tensor(224700000000)</td>\n",
       "      <td>tensor(2247000000000)</td>\n",
       "      <td>2247</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>A</td>\n",
       "      <td>2247</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>tensor(71422)</td>\n",
       "      <td>tensor(714220)</td>\n",
       "      <td>tensor(7142200)</td>\n",
       "      <td>tensor(71422000)</td>\n",
       "      <td>tensor(714220000)</td>\n",
       "      <td>tensor(7142200000)</td>\n",
       "      <td>tensor(71422000000)</td>\n",
       "      <td>tensor(714220000000)</td>\n",
       "      <td>tensor(7142200000000)</td>\n",
       "      <td>tensor(71422000000000)</td>\n",
       "      <td>71422</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>A</td>\n",
       "      <td>71422</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>tensor(71726)</td>\n",
       "      <td>tensor(717242)</td>\n",
       "      <td>tensor(7172402)</td>\n",
       "      <td>tensor(71724000)</td>\n",
       "      <td>tensor(717240000)</td>\n",
       "      <td>tensor(7172400000)</td>\n",
       "      <td>tensor(71724000000)</td>\n",
       "      <td>tensor(717240000000)</td>\n",
       "      <td>tensor(7172400000000)</td>\n",
       "      <td>tensor(71724000000000)</td>\n",
       "      <td>71724</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>B</td>\n",
       "      <td>171728</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>tensor(74436)</td>\n",
       "      <td>tensor(744360)</td>\n",
       "      <td>tensor(7443600)</td>\n",
       "      <td>tensor(74436000)</td>\n",
       "      <td>tensor(744360000)</td>\n",
       "      <td>tensor(7443600000)</td>\n",
       "      <td>tensor(74436000000)</td>\n",
       "      <td>tensor(744360000000)</td>\n",
       "      <td>tensor(7443600000000)</td>\n",
       "      <td>tensor(74436000000000)</td>\n",
       "      <td>74436</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>A</td>\n",
       "      <td>74436</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           var_0           var_1            var_2             var_3  \\\n",
       "0   tensor(1287)   tensor(12870)   tensor(128700)   tensor(1287000)   \n",
       "1   tensor(2247)   tensor(22470)   tensor(224700)   tensor(2247000)   \n",
       "2  tensor(71422)  tensor(714220)  tensor(7142200)  tensor(71422000)   \n",
       "3  tensor(71726)  tensor(717242)  tensor(7172402)  tensor(71724000)   \n",
       "4  tensor(74436)  tensor(744360)  tensor(7443600)  tensor(74436000)   \n",
       "\n",
       "               var_4               var_5                var_6  \\\n",
       "0   tensor(12870000)   tensor(128700000)   tensor(1287000000)   \n",
       "1   tensor(22470000)   tensor(224700000)   tensor(2247000000)   \n",
       "2  tensor(714220000)  tensor(7142200000)  tensor(71422000000)   \n",
       "3  tensor(717240000)  tensor(7172400000)  tensor(71724000000)   \n",
       "4  tensor(744360000)  tensor(7443600000)  tensor(74436000000)   \n",
       "\n",
       "                  var_7                  var_8                   var_9   time  \\\n",
       "0   tensor(12870000000)   tensor(128700000000)   tensor(1287000000000)   1287   \n",
       "1   tensor(22470000000)   tensor(224700000000)   tensor(2247000000000)   2247   \n",
       "2  tensor(714220000000)  tensor(7142200000000)  tensor(71422000000000)  71422   \n",
       "3  tensor(717240000000)  tensor(7172400000000)  tensor(71724000000000)  71724   \n",
       "4  tensor(744360000000)  tensor(7443600000000)  tensor(74436000000000)  74436   \n",
       "\n",
       "   device  target region   index  \n",
       "0       0       1      A    1287  \n",
       "1       0       0      A    2247  \n",
       "2       0       1      A   71422  \n",
       "3       2       2      B  171728  \n",
       "4       0       1      A   74436  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "(200004, 15)"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "samples = 100_000\n",
    "wl = 5\n",
    "n_vars = 10\n",
    "\n",
    "t = (torch.stack(n_vars * [torch.arange(samples)]).T * tensor([10**i for i in range(n_vars)]))\n",
    "df = pd.DataFrame(t, columns=[f'var_{i}' for i in range(n_vars)])\n",
    "df['time'] = np.arange(len(t))\n",
    "df['device'] = 0\n",
    "df['target'] = np.random.randint(0, 2, len(df))\n",
    "df2 = df.copy()\n",
    "df3 = df.copy()\n",
    "cols = ['var_0', 'var_1', 'var_2', 'device', 'target']\n",
    "df2[cols] = df2[cols] + 1\n",
    "df3[cols] = df3[cols] + 2\n",
    "df2 = df2.loc[:3]\n",
    "df['region'] = 'A'\n",
    "df2['region'] = 'A'\n",
    "df3['region'] = 'B'\n",
    "df = df.append(df2).append(df3).reset_index(drop=True)\n",
    "df['index'] = np.arange(len(df))\n",
    "df = df.sample(frac=1).reset_index(drop=True)\n",
    "display(df.head())\n",
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "((199992, 10, 5), (199992,))"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X, y = SlidingWindowPanel(window_len=5, unique_id_cols=['device'], stride=1, start=0, get_x=df.columns[:n_vars], get_y=['target'], \n",
    "                          horizon=0, seq_first=True, sort_by=['time'], ascending=True, return_key=False)(df)\n",
    "X.shape, y.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "((199992, 10, 5), (199992,), (199992,))"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X, y, key = SlidingWindowPanel(window_len=5, unique_id_cols=['device'], stride=1, start=0, get_x=df.columns[:n_vars], get_y=['target'], \n",
    "                               horizon=0, seq_first=True, sort_by=['time'], ascending=True, return_key=True)(df)\n",
    "X.shape, y.shape, key.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "((199992, 10, 5), (199992,))"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X, y = SlidingWindowPanel(window_len=5, unique_id_cols=['device', 'region'], stride=1, start=0, get_x=df.columns[:n_vars], get_y=['target'], \n",
    "                          horizon=0, seq_first=True, sort_by=['time'], ascending=True)(df)\n",
    "X.shape, y.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# y_func must be a function applied to axis=1!\n",
    "def y_max(o): return np.max(o, axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "((199982, 10, 5), (199982,))"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X, y = SlidingWindowPanel(window_len=5, unique_id_cols=['device', 'region'], stride=1, start=0, get_x=df.columns[:n_vars], get_y=['target'], \n",
    "                          y_func=y_max, horizon=5, seq_first=True, sort_by=['time'], ascending=True)(df)\n",
    "X.shape, y.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# export\n",
    "\n",
    "def identify_padding(float_mask, value=-1):\n",
    "    \"\"\"Identifies padded subsequences in a mask of type float\n",
    "    \n",
    "    This function identifies as padded subsequences those where all values == nan \n",
    "    from the end of the sequence (last dimension) across all channels, and sets\n",
    "    those values to the selected value (default = -1)\n",
    "    \n",
    "    Args:\n",
    "        mask: boolean or float mask\n",
    "        value: scalar that will be used to identify padded subsequences \n",
    "    \"\"\"\n",
    "    padding = torch.argmax((torch.flip(float_mask.mean((1)) - 1, (-1,)) != 0).float(), -1)\n",
    "    padded_idxs = torch.arange(len(float_mask))[padding != 0]\n",
    "    if len(padded_idxs) > 0:\n",
    "        padding = padding[padding != 0]\n",
    "        for idx,pad in zip(padded_idxs, padding): float_mask[idx, :, -pad:] = value\n",
    "    return float_mask"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input shape: (13, 3)\n",
      "tensor([[[ 0.,  1.,  2.,  3.,  4.],\n",
      "         [ 0.,  1.,  2., nan, nan],\n",
      "         [ 0.,  1.,  2.,  3.,  4.],\n",
      "         [ 0.,  0.,  0.,  0.,  0.]],\n",
      "\n",
      "        [[nan, nan, nan,  8.,  9.],\n",
      "         [nan, nan, nan,  8.,  9.],\n",
      "         [nan, nan, nan,  8.,  9.],\n",
      "         [nan, nan, nan,  0.,  0.]],\n",
      "\n",
      "        [[10., 11., 12., nan, nan],\n",
      "         [10., 11., 12., nan, nan],\n",
      "         [10., 11., 12., nan, nan],\n",
      "         [ 0.,  0.,  0.,  1.,  1.]]])\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "tensor([[[0., 0., 0., 0., 0.],\n",
       "         [0., 0., 0., 1., 1.],\n",
       "         [0., 0., 0., 0., 0.],\n",
       "         [0., 0., 0., 0., 0.]],\n",
       "\n",
       "        [[1., 1., 1., 0., 0.],\n",
       "         [1., 1., 1., 0., 0.],\n",
       "         [1., 1., 1., 0., 0.],\n",
       "         [1., 1., 1., 0., 0.]],\n",
       "\n",
       "        [[0., 0., 0., 1., 1.],\n",
       "         [0., 0., 0., 1., 1.],\n",
       "         [0., 0., 0., 1., 1.],\n",
       "         [0., 0., 0., 0., 0.]]])"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "wl = 5\n",
    "stride = 5\n",
    "\n",
    "t = np.repeat(np.arange(13).reshape(-1,1), 3, axis=-1)\n",
    "print('input shape:', t.shape)\n",
    "X, _ = SlidingWindow(wl, stride=stride, pad_remainder=True, get_y=[])(t)\n",
    "X = tensor(X)\n",
    "X[0, 1, -2:] = np.nan\n",
    "X[1,..., :3] = np.nan\n",
    "print(X)\n",
    "identify_padding(torch.isnan(X).float())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "IPython.notebook.save_checkpoint();"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "011_data.preparation.ipynb saved at 2021-11-15 12:07:38.\n",
      "Converted 011_data.preparation.ipynb.\n",
      "\n",
      "\n",
      "Correct conversion! 😃\n",
      "Total time elapsed 0.096 s\n",
      "Monday 15/11/21 12:07:42 CET\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "                <audio  controls=\"controls\" autoplay=\"autoplay\">\n",
       "                    <source src=\"data:audio/wav;base64,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\" type=\"audio/wav\" />\n",
       "                    Your browser does not support the audio element.\n",
       "                </audio>\n",
       "              "
      ],
      "text/plain": [
       "<IPython.lib.display.Audio object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#hide\n",
    "from tsai.imports import create_scripts\n",
    "from tsai.export import get_nb_name\n",
    "nb_name = get_nb_name()\n",
    "create_scripts(nb_name);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
